百木园-与人分享,
就是让自己快乐。

Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

本文参考输入输出 — Python 3.7.10 文档。首先声明咱的实验环境。

❯ python --version
Python 3.7.0

引例:场景带来的需求

我们要在控制台上给用户反馈计算结果(比如AOE值为 0.82 ),于是就要写 print 逻辑。描述计算结果的语句是死的(AOE值为),但数字是活的(0.82)。我们希望把计算结果拼接到描述结构的语句上。新手可能会用字符串的拼接(字符串的「加法运算」+)。

val_dict = {
\'AOE\': 0.8200001,
\'wcb\': 13423431,
\'p\': 0.0314
}

print(\"AOE值为 \" + str(val_dict[\'AOE\']) + \" ,wcb值为 \" + str(val_dict[\'wcb\']))
if val_dict[\'p\'] < 0.05: print(\'拒绝原假设\')
else: print(\'接收原假设\')

输出:

AOE值为 0.8200001 ,wcb值为 13423431
拒绝原假设

我们将介绍一种格式化方法,无论是书写还是易读,都比上述方法要优雅。

并且,我们将解决字符串拼接不能自动解决的小数位、科学计数法等问题。

格式化字符串字面值

官方文档:要使用格式化字符串字面值,请在字符串的开始引号或三引号之前加上一个 f 或 F 。在此字符串中,你可以在 { 和 } 字符之间写可以引用的变量或字面值的 Python 表达式。

有点费解,还是看实例最清晰。

咱们把上面的代码改一下。

print(f\"AOE值为 {val_dict[\'AOE\']} ,wcb值为 {val_dict[\'wcb\']}\")
print(f\"{\'拒绝原假设\' if val_dict[\'p\'] < 0.05 else \'接收原假设\'}\")

输出:

AOE值为 0.8200001 ,wcb值为 13423431
拒绝原假设

没毛病,和之前的写法效果一模一样。但是咱们这回直接把「活的」变量『嵌入』到「死的」句子里面去了。

而且咱还把逻辑写进了字符串,说明在 f\"{}\" 的 {} 大括号里面,放变量和表达式都行。

再把上面的例子变个形,来看看更多用法:比如在 {} 大括号里做简单的运算,或者使用一些特殊格式化语法保留小数、转化为科学计数法。

print(f\"AOE值为 {val_dict[\'AOE\'] * 100}% ,wcb值为 {val_dict[\'wcb\'] :E}\")
print(f\"{\'拒绝原假设\' if val_dict[\'p\'] < 0.05 else \'接收原假设\'}\")

输出:

AOE值为 82.00001% ,wcb值为 1.342343E+07
拒绝原假设

注意到上面我们用了 {val_dict[\'wcb\'] :E} 这样的特殊语法,:E 表示把数字 val_dict[\'wcb\'] 转换为科学计数法。

类似:E,我们还有更多用法。在 Python 中,其名称为格式规格迷你语言(format specification mini language)。

我们可以直接应用 :.2% 来表示「让数字变成百分数%,并且保留两位小数(.2)」。

print(f\"AOE值为 {val_dict[\'AOE\'] :.2%}% ,wcb值为 {val_dict[\'wcb\'] :E}\")
print(f\"{\'拒绝原假设\' if val_dict[\'p\'] < 0.05 else \'接收原假设\'}\")

输出:

AOE值为 82.00%% ,wcb值为 1.342343E+07
拒绝原假设

岂不是要比 {val_dict[\'AOE\'] * 100}% 的写法优雅很多。

更多示例

其他用法可以参考Python的字符串格式示例(format examples)。咱们这里自己造个场景:打印表格。

table = {
\'Tom\': [31, 32.314, 31, .423],
\'Jerry\': [1, .41, 313, 123],
\'Paul\': [7, .4, 53, .45754]
}

def print_table(t):
print(\'| name | attr | feat | gest | dest |\')
print(\'|--------|--------|--------|--------|--------|\')
for name, vals in table.items():
print(f\'|{name :_^8}|{vals[0] :^8}|{vals[1] :>6.2f} |{vals[2] :^8}|{vals[3] :>8.3f}|\')

print_table(table)

输出:

| name | attr | feat | gest | dest |
|--------|--------|--------|--------|--------|
|__Tom___| 31 | 32.31 | 31 | 0.423|
|_Jerry__| 1 | 0.41 | 313 | 123.000|
|__Paul__| 7 | 0.40 | 53 | 0.458|

如上:

  • 我们的数据在 table 里存储了数据
  • 在 print_table 保存了打印数据的逻辑
    • f{name :_^8} 中,^表示居中,8表示长度为 8,_表示填充_(默认填充空格)
    • f{vals[1] :>6.2f} 中,>6表示长度为 6 且靠右,.2f表示作为小数,且保留 2 位

更多的内容除了参考官方文档,菜鸟教程的Python格式化函数也是不错的中文资料。

以后随用随查,在搜索引擎中输入关键字python + 格式化输出即可。

我是小拍,欢迎加我微信 PiperLHJ 转载交流。

来源:https://www.cnblogs.com/piperliu/p/14862492.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

相关推荐

  • 暂无文章