Python实现字符串格式化的五种方法
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1. + 拼接:必须都是字符串,所以要 str(age)</a></li><li><a href="#_label1">2. print 多参数:自动转字符串,但默认会加空格</a></li><li><a href="#_label2">3. % 格式化:旧式占位符写法</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">% 常见的形式</a></li></ul><li><a href="#_label3">4. f-string:最常用、最推荐</a></li><ul class="second_class_ul"></ul><li><a href="#_label4">5. format() 格式化</a></li><ul class="second_class_ul"></ul><li><a href="#_label5">总结</a></li><ul class="second_class_ul"></ul></ul></div><p>示例:</p><div class="jb51code"><pre class="brush:py;">name = "Forbearing"
age = 18
print("My name is " + name + ", and I am " + str(age) + " years old.")
print("My name is", name, ", and I am", age, "years old.")
print("My name is %s, and I am %d years old." % (name, age))
print(f"My name is {name}, and I am {age} years old.")
print("My name is {}, and I am {} years old.".format(name, age))
</pre></div>
<p>运行结果:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010809395685.png" /></p>
<p class="maodian"><a name="_label0"></a></p><h2>1. + 拼接:必须都是字符串,所以要 str(age)</h2>
<div class="jb51code"><pre class="brush:py;">print("My name is " + name + ", and I am " + str(age) + " years old.")
</pre></div>
<ul><li>+是<strong>字符串拼接</strong>。</li><li>规则很硬:“字符串” + 变量 两边必须都是 str。</li><li>age 是 int,不能直接和字符串相加,所以要 str(age) 转成字符串。</li><li>常见报错原因:"I am " + age(str 和 int 不能相加)。</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>2. print 多参数:自动转字符串,但默认会加空格</h2>
<div class="jb51code"><pre class="brush:py;">print("My name is", name, ", and I am", age, "years old.")
</pre></div>
<ul><li>这里不是“拼接”,而是 print() 接收了多个参数。</li><li>print 会把每个参数都转成可显示文本(所以 age 不用 str())。</li><li>默认用空格把参数隔开:sep=" ",所以输出里会出现一些空格。</li><li>如果你想控制输出样式,可以改 sep 或 end:</li></ul>
<div class="jb51code"><pre class="brush:py;">print("A", "B", sep="-")# A-B
print("X", end="") # 不换行
print("Y") # 接着输出
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>3. % 格式化:旧式占位符写法</h2>
<div class="jb51code"><pre class="brush:py;">print("My name is %s, and I am %d years old." % (name, age))
</pre></div>
<ul><li>先写一个“模板字符串”,里面放占位符:<ul><li>%s:填入字符串(很多类型也能用 %s,会转成字符串)</li><li>%d:填入整数</li></ul></li><li>右边用一个元组 (name, age) 按顺序把值塞进去。</li></ul>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>% 常见的形式</h3>
<table><thead><tr><th>格式符号</th><th>转换</th></tr></thead><tbody><tr><td>%s</td><td>字符串</td></tr><tr><td>%d</td><td>有符号的十进制整数</td></tr><tr><td>%f</td><td>浮点数</td></tr><tr><td>%c</td><td>字符</td></tr><tr><td>%u</td><td>无符号十进制整数</td></tr><tr><td>%o</td><td>八进制整数</td></tr><tr><td>%x</td><td>十六进制整数(小写ox)</td></tr><tr><td>%X</td><td>十六进制整数(大写OX)</td></tr><tr><td>%e</td><td>科学计数法(小写’e’)</td></tr><tr><td>%E</td><td>科学计数法(大写’E’)</td></tr><tr><td>%g</td><td>%f和%e的简写</td></tr><tr><td>%G</td><td>%f和%E的简写</td></tr></tbody></table>
<p class="maodian"><a name="_label3"></a></p><h2>4. f-string:最常用、最推荐</h2>
<div class="jb51code"><pre class="brush:py;">print(f"My name is {name}, and I am {age} years old.")
</pre></div>
<ul><li>字符串前加 f,然后用 {} 包变量或表达式。</li><li>{} 里不只能放变量,也能放表达式/函数调用:</li></ul>
<div class="jb51code"><pre class="brush:py;">print(f"next year: {age + 1}")
print(f"upper: {name.upper()}")
</pre></div>
<ul><li>也支持格式控制(例如保留两位小数、补零、对齐):</li></ul>
<div class="jb51code"><pre class="brush:py;">x = 3.14159
print(f"{x:.2f}") # 3.14
print(f"{age:05d}") # 00018
</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>5. format() 格式化</h2>
<div class="jb51code"><pre class="brush:py;">print("My name is {}, and I am {} years old.".format(name, age))
</pre></div>
<ul><li>{} 是占位符,.format(…) 按顺序填进去。</li><li>支持命名参数,模板更清晰:</li></ul>
<div class="jb51code"><pre class="brush:py;">print("My name is {n}, and I am {a} years old.".format(n=name, a=age))
</pre></div>
<ul><li>也支持格式控制(和 f-string 类似):</li></ul>
<div class="jb51code"><pre class="brush:py;">x = 3.14159
print("{:.2f}".format(x))# 3.14
</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>总结</h2>
<ol><li>+:真的在拼字符串,所以 int 必须 str()</li><li>print(a, b, c):不是拼接,是打印多个参数,默认加空格</li><li>% / format / f-string:格式化(模板 + 填值),通常更清晰</li><li>日常推荐:f-string</li></ol>
頁:
[1]