python3.8更新重点

新增的语法 := 可在表达式内部为变量赋值。

它被昵称为“海象运算符”因为它很像是 海象的眼睛和长牙。

在这个示例中,赋值表达式可以避免调用 len() 两次:
n = len(a) if n>10: print(f"List is too long ({n} elements, expected <= 10)")
if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")

位置形参

新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。
在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参:
位置形参a,b/位置形参或关键字形参*关键字形参
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
以下均为合法的调用:

f(10, 20, 30, d=40, e=50, f=60)
但是,以下均为不合法的调用:

f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
由于在 / 左侧的形参不会被公开为可用关键字,其他形参名仍可在 **kwargs 中使用:

def f(a, b, /, **kwargs):
print(a, b, kwargs)

f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}

你可能感兴趣的:(python3.8更新重点)