不常用的 Python 特性
下面我们介绍一些不太常见,过时或未广泛使用的 Python 特性。
字符串格式化
字符串格式化有以下三种形式:
- % 运算符
- .format() 方法 (在 Python 2.6 中引入)
- f-string (在 Python 3.6 中引入) 其中,% 运算符是最古老的字符串格式化方式,它的语法比较复杂,不易于阅读和维护。 .format() 方法是较新的字符串格式化方式,语法更加简洁而较为稳定。 f-string 是最新的字符串格式化方式,它的语法更加直观,且仍然在活跃更新。
用 sys.exc_info() 进行异常处理
sys.exc_info() 仍然可用,但 except 块的 as 语法(except Exception as e:)现在更常见。
for 和 while 循环后的 else
循环中的 else 子句仍受支持,但很少使用或广为人知。仅当循环未被 break 终止时,才会执行它。 此功能有时很有用,但其行为经常被误解,因此许多开发人员都避免使用它。
字符串隐式拼接
Python 中,您只需将字符串文字彼此相邻放置,无需任何运算符即可连接它们。这仅适用于文本,而不适用于变量或表达式。
PS: MicroPython 对字符串隐式拼接的支持有限,参见 https://docs.micropython.org/en/latest/genrst/core_language.html#f-strings-don-t-support-concatenation-with-adjacent-literals-if-the-adjacent-literals-contain-braces
紧贴数字的关键字
Python 中,数字字面量后可以紧贴关键字。这也就是为什么变量名不能以数字开头。
PS:
- 这是不推荐的做法, 会导致
SyntaxWarning且在多数语法检查器中被认为是错误。 - MicroPython 对紧贴数字的关键字的支持有限,参见 https://docs.micropython.org/en/latest/genrst/syntax.html#upy-requires-spaces-between-literal-numbers-and-keywords-cpy-doesn-t
<>:1: SyntaxWarning: invalid decimal literal
字典的 __missing__ 方法
__missing__ 方法允许您定义 dictionary 子类中缺失键的行为。
显式切片
可以显式创建切片对象以进行切片,并在多个操作中重复使用。
具有多个上下文管理器的 with 语句
可以使用逗号将多个上下文管理器组合成一个 with 语句。
Ellipsis (...)
Ellipsis 对象 (...) 是一个单例,通常用于高级场景,例如在 NumPy 中进行切片或作为占位符。
max() 和 min() 中的 key 参数
key 参数并不总是广为人知,并且可以简化许多任务。
del 语句
del 通常用于删除字典中的键,但它也可以删除列表切片。
链式赋值与链式比较
Python 允许在一行中对多个变量进行赋值或将比较链接起来。 链式赋值多个变量赋值为最右边的值。 链式比较将多个比较结果取与运算。
str.maketrans() 与 str.translate()
与 .replace() 类似,.maketrans() 方法可以创建字符映射表,用于 .translate() 方法批量替换字符串中的字符。
一元 + 运算符
一元 + 运算符也有对应的魔法方法 __pos__(),很少使用,但可以用于在自定义类中返回对象的正版本。
yield from
yield from 语句简化了对子生成器的委托,但不太常见。