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
位
- f
更多的内容除了参考官方文档,菜鸟教程的Python格式化函数也是不错的中文资料。
以后随用随查,在搜索引擎中输入关键字python + 格式化输出
即可。
我是小拍,欢迎加我微信 PiperLHJ 转载交流。
Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式的更多相关文章
- Python 3.11.官方文档
索引 模块 | Python » English Spanish French Japanese Korean Brazilian Portuguese Simplified Chinese Trad ...
- Python3.5.2官方文档学习备忘录
网址:https://docs.python.org/3/ 虽然学习官方文档有些耗时,不过看最原版的还是感觉好一点,原汁原味没有曲解没有省略. 从命令行向Python传递参数,运行:python - ...
- 阅读Python官方文档心得
我会每天都阅读一些python的官方文档,并每天更新心得体会. -------------------------------------------------2016.12.08--------- ...
- 别开心太早,Python 官方文档的翻译差远了
近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊P ...
- python附录-re.py模块源码(含re官方文档链接)
re模块 python官方文档链接:https://docs.python.org/zh-cn/3/library/re.html re模块源码 r"""Support ...
- python附录-builtins.py模块str类源码(含str官方文档链接)
python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...
- [Python3]Python官方文档-Python Manuals
简介 一般情况下,初学者都不愿意直接去浏览Python Manuals,即Python自带的官方文档.尤其是只有英文版的情况下,初学者更加不会去使用该官方文档了. 在这里笔者强力推荐初学者经常学会使用 ...
- Python格式化字符串--format
format格式化字符串方法相较于老版%格式方法的优点: 1.不需要理会数据类型的问题,在%方法中'%s'只能替代字符串类型. 2.单个参数可以多次输出,参数顺序可以不相同. 3.填充方式十分灵活,对 ...
- Python - 格式化字符串的用法
0. 摘要 Python支持多种格式化字符串的方法,包括%-fromatting.str.format().f-strings三种,f-strings是Python3.6以后出现的一种新方法,相比其他 ...
- Spark官方文档 - 中文翻译
Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...
随机推荐
- k8s 中的 Gateway API 的背景和简介【k8s 系列之四】
〇.Gateway API 的背景 第一阶段:Service 初始的 Kubernetes 内部服务向外暴露,使用的是自身的 LoadBlancer 和 NodePort 类型的 Service. 在 ...
- CentOS8安装RabbitMQ3.8.16
之前安装过旧版的RabbitMQ和Erlang,先卸载. ①:卸载RabbitMQ /sbin/service rabbitmq-server stop yum list | grep rabbitm ...
- Web渗透06_XSS
XSS漏洞描述 XSS是非常厉害的漏洞,在OWASP TOP10中榜上有名. XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网 ...
- dotnet6.0安装
解压到目录 sudo mkdir -p /usr/share/dotnet && sudo tar zxf dotnet-sdk-6.0.423-linux-x64.tar.gz -C ...
- Marklogic学习 系列专栏整理
Marklogic学习 系列专栏整理 本人就是个松鼠怪,见到好东西都想收藏,在CSDN发现了这位博主写的一系列MarkLogic相关专栏觉得不错,今天已经看到第六个了,反正很好吃,趁着最近项目使用Ma ...
- You Shi Zai Wo
Xuzhou is a place where there have been more than 50 large-scale battles from ancient times to the p ...
- Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家
最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了Manjaro KDE Plasma,经过一段时间的发展,Linux桌面可用性大大提高. Kindle->Ki ...
- ScheduledThreadPoolExecutor与System#nanoTime
一直流传着Timer使用的是绝对时间,ScheduledThreadPoolExecutor使用的是相对时间,那么ScheduledThreadPoolExecutor是如何实现相对时间的? 先看看S ...
- 我对Java内存模型的理解
所有的编程语言中都有内存模型这个概念,区别于微架构的内存模型,高级语言的内存模型包括了编译器和微架构两部分.我试图了解了Java.C#和Go语言的内存模型,发现内容基本大同小异,只是这些语言在具体实现 ...
- pikachu平台XXE漏洞通关教程详解
声明! 如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!! 文章来自个人csdn博客,地址:ht ...