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
拒绝原假设

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

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

格式化字符串字面值

官方文档:要使用格式化字符串字面值,请在字符串的开始引号或三引号之前加上一个 fF 。在此字符串中,你可以在 {} 字符之间写可以引用的变量或字面值的 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 转载交流。

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

  1. Python 3.11.官方文档

    索引 模块 | Python » English Spanish French Japanese Korean Brazilian Portuguese Simplified Chinese Trad ...

  2. Python3.5.2官方文档学习备忘录

    网址:https://docs.python.org/3/ 虽然学习官方文档有些耗时,不过看最原版的还是感觉好一点,原汁原味没有曲解没有省略. 从命令行向Python传递参数,运行:python - ...

  3. 阅读Python官方文档心得

    我会每天都阅读一些python的官方文档,并每天更新心得体会. -------------------------------------------------2016.12.08--------- ...

  4. 别开心太早,Python 官方文档的翻译差远了

    近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊P ...

  5. python附录-re.py模块源码(含re官方文档链接)

    re模块 python官方文档链接:https://docs.python.org/zh-cn/3/library/re.html re模块源码 r"""Support ...

  6. python附录-builtins.py模块str类源码(含str官方文档链接)

    python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...

  7. [Python3]Python官方文档-Python Manuals

    简介 一般情况下,初学者都不愿意直接去浏览Python Manuals,即Python自带的官方文档.尤其是只有英文版的情况下,初学者更加不会去使用该官方文档了. 在这里笔者强力推荐初学者经常学会使用 ...

  8. Python格式化字符串--format

    format格式化字符串方法相较于老版%格式方法的优点: 1.不需要理会数据类型的问题,在%方法中'%s'只能替代字符串类型. 2.单个参数可以多次输出,参数顺序可以不相同. 3.填充方式十分灵活,对 ...

  9. Python - 格式化字符串的用法

    0. 摘要 Python支持多种格式化字符串的方法,包括%-fromatting.str.format().f-strings三种,f-strings是Python3.6以后出现的一种新方法,相比其他 ...

  10. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

随机推荐

  1. RocketMQ 在小米的多场景灾备实践案例

    本文作者:邓志文.王帆 01为什么要容灾? 在小米内部,我们使用 RocketMQ 来为各种在线业务提供消息队列服务,比如商城订单.短信通知甚至用来收集 IoT 设备的上报数据,可以说 RocketM ...

  2. URL是什么

    URL是什么 URL(Uniform Resource Locator,统一资源定位器) URL的组成: 协议://{域名|主机名|IP}:端口/路径/文件名?参数#锚点 协议 Scheme/Prot ...

  3. 云游戏平台陷入苦战,继青椒云,云更新,顺网云后,ToDesk正在布局云电竞市场

    在日新月异的科技浪潮中,云游戏正在逐步成为游戏产业的重要分支.根据中国信通院<2023年全球云游戏产业深度观察及趋势研判研究报告>,2022年中国云游戏市场收入达到63.5亿元,同比增长5 ...

  4. 大疆消费级无人机调参软件 Assistant 2 与模拟器

    0 大疆消费级无人机调参 Assistant 2 无人机调参软件常用来为无人机的某些参数做校准.大疆的无人机调参软件分为行业级版和消费级版. 行业级版本基本为每个适配机型都添加了与之对应的模拟器功能. ...

  5. Vmware Workstation的虚拟机如何通过宿主机的无线网卡和外部通信

    今天需要在我的笔记本w10电脑上安装一个linux虚拟机,苦于我的w10是家庭版,没有hyper-v功能,所以安装了 vmware的workstation的软件,然后创建了虚拟机,但是总是搞不定如何让 ...

  6. CF939 D

    CF939 D 让你把区间分成 \(k\) 段, 段内用 \(xor\) 连接, 段之间用 \(or\) 连接,问你在结果不大于 \(x\) 的前提下, \(k\) 的最大值 \(1 \leq n \ ...

  7. games101_Homework7

    实现完整的 Path Tracing 算法 需要修改这一个函数: • castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing ...

  8. 基于Java+SpringBoot心理测评心理测试系统功能实现七

    一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...

  9. Nginx 配置 浏览器显示真实接口地址

    server { listen 9780; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access. ...

  10. .NET现在可以做什么,有哪些公司在用的?

    前言 本文大姚和大家一起来分析一下.NET现在可以做什么,.NET未来的发展趋势在哪,有哪些公司在使用的. .NET简单介绍 .NET是一个开源(MIT License).免费.跨平台的开发人员平台框 ...