Python 3.8 发布于 2019.10.14
本文目录
一.、赋值表达式
二.、仅位置参数
三、其他
一、赋值表达式 ‘:=’
(PEP 572 – Assignment Expressions)
目的:
尤其适用于:fun()或者if/while 表达式中计算或者判断要用的值,后面block中也要重复使用该表达式的值
原因(合理性):
对表达式的结果进行命名是编程的重要部分,它允许使用描述性名称代替较长的表达式,并允许重用。 当前,此功能仅以语句形式可用,从而使其在列表推导和其他表达式上下文中不可用。
此外,命名大表达式的子部分可以帮助交互式调试器,提供有用的显示挂钩和部分结果。 如果没有一种方法可以内联捕获子表达式,则需要重构原始代码。 对于赋值表达式,这仅需要插入几个名称:=标记。 消除了重构的需要,减少了在调试过程中无意中更改代码的可能性(这是Heisenbug的常见原因),并且更容易指示其他程序员。
作为此更改的一部分,还对字典推导评估顺序进行了更新,以确保在值表达式之前执行键表达式(允许将键绑定到名称,然后重新用作计算相应值的一部分)。
实例
1.避免两次使用len()
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
2.避免两次匹配
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
discount = float(mo.group(1))