語言特性

這篇主要是針對我比較有感的部分整理而非完整的描述喔!

如果想要看到更完整的內容可以去下方的參考來源

表達式

:= 海象運算子(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}

由於 ab 都是非公開參數,所以不能給予鍵值賦值,而後面的 a=1b=2 是會對應的 **kwargs 所以不會有任何問題。

f-string 支援 = 運算子

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)

其他語言特性