這篇主要是針對我比較有感的部分整理而非完整的描述喔!
如果想要看到更完整的內容可以去下方的參考來源!
:=
海象運算子(The Walrus Operator)
新
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
# Loop over fixed length blocks
while (block := f.read(256)) != '':
process(block)
舊
n = len(a)
if n > 10:
print(f"List is too long ({n} elements, expected <= 10)")
while True:
block = f.read(256)
if block == '':
break
process(block)
/
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
a
b
:不能給予鍵值(不公開的參數)
c
d
:可自由選擇
e
f
:必須給予鍵值
對
錯
f(10, 20, 30, d=40, e=50, f=60)
f(10, 20, c=30, 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
>>> 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}
由於 a
和 b
都是非公開參數,所以不能給予鍵值賦值,而後面的 a=1
和 b=2
是會對應的 **kwargs
所以不會有任何問題。
=
運算子
f'{expr=}'
可以更容易輸出看得懂的值
新
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
舊
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'user='{user}' member_since={member_since}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
簡單來說就是把 f-string 中有 =
的值包裝成 param_name=repr(param)
。
continue
可以在 finally
區塊中使用