python编码风格:pep-0498 ( Python 代码风格指南 )

地址:

https://www.python.org/dev/peps/pep-0498



PEP 498 -- 字面量字符串插值
摘要
Python 支持多种方式将表达式嵌入字符串字面量中。然而,这些方式都各有局限性,例如无法使用任意表达式、冗长的语法,或是难以与国际化(i18n)工具结合使用。

本 PEP 提出了一种新的字符串前缀 f,用于表示“格式化字符串字面量”(f-strings)。这种字符串字面量允许在字符串中嵌入表达式,表达式会在运行时求值并格式化。

动机
Python 目前提供了多种字符串格式化方式:

% 格式化:类似于 C 的 printf 风格,例如 "Hello, %s" % name。

str.format():例如 "Hello, {}".format(name)。

字符串模板:例如 Template("Hello, $name").substitute(name=name)。

这些方式各有优缺点。% 格式化简单但功能有限;str.format() 功能强大但语法冗长;字符串模板安全性高但不支持复杂表达式。

f-strings 的目标是提供一种简洁、易读且功能强大的字符串插值方式。

规范
语法
f-strings 的语法如下:

python
复制
f ' { <optional !s, !r, or !a> } ... '
f 是字符串前缀,表示这是一个格式化字符串字面量。

是普通字符串内容。

是嵌入的 Python 表达式。

!s、!r 和 !a 是可选的转换标志,分别表示 str()、repr() 和 ascii()。
format_specifier 是可选的格式说明符,用于控制表达式的输出格式。

示例
以下是一些 f-strings 的示例:

python
复制
name = "Fred"
f"He said his name is {name}." # "He said his name is Fred."

width = 10
precision = 4
value = decimal.Decimal("12.34567")
f"result: {value:{width}.{precision}}" # "result: 12.35"

f"{name!r}" # "'Fred'"
f"{name!a}" # "'Fred'"
表达式求值
f-strings 中的表达式在运行时求值,且遵循 Python 的作用域规则。表达式可以包含任意有效的 Python 代码,包括函数调用、属性访问等。

python
复制
f"{2 * 3}" # "6"
f"{name.upper()}" # "FRED"
格式说明符
f-strings 支持与 str.format() 相同的格式说明符。格式说明符位于表达式后的 : 之后。

python
复制
import datetime
now = datetime.datetime.now()
f"{now:%Y-%m-%d %H:%M:%S}" # "2023-10-05 14:30:00"
转义字符
f-strings 中的大括号 { 和 } 可以通过双写 {{ 和 }} 来转义。

python
复制
f"{{name}}" # "{name}"
与现有格式化方式的比较
% 格式化:f-strings 更简洁且功能更强大。

str.format():f-strings 语法更简洁,且可以直接嵌入表达式。

字符串模板:f-strings 支持复杂表达式,而字符串模板更注重安全性。

向后兼容性
f-strings 是 Python 3.6 引入的新特性,不会影响现有代码。使用 f 前缀的字符串字面量在早期版本的 Python 中会引发语法错误。

参考实现
f-strings 的参考实现已在 CPython 3.6 中完成,并作为标准库的一部分发布。

结论
f-strings 提供了一种简洁、易读且功能强大的字符串插值方式,能够显著提高代码的可读性和开发效率。它结合了现有格式化方式的优点,同时避免了它们的局限性,是 Python 字符串格式化的一次重要改进。









posted on   Angry_Panda  阅读(6)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2024-02-01 深度学习的高速推理方案:如何实现工业级的神经网络推理加速
2024-02-01 中国特供阉割版4090D建议安装最新驱动,据说不然的话会报error:4090和4090D对比
2024-02-01 华为显卡已经支持pytorch计算框架
2024-02-01 nvtop —— GPU使用情况的可视化工具
2024-02-01 很好用的python游戏环境(续2):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境
2024-02-01 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境
2024-02-01 python语言下的迷宫游戏的实现猜想

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示