stock = {
'nails': 125,
'screws': 35,
'wingnuts': 8,
'washers': 24,
}
def get_batches(count, size):
return count // size
comprehensions是python常用的一個功能,可以快速生成list, dict, set等變數。但有時會出現一些重覆的計算…
order = ['screws', 'wingnuts', ' clips']
found = {name: get_batches(stock.get(name, 0), 8)
for name in order
if get_batches(stock.get(name, 0), 8)}
print(found)
{‘screws’: 4, ‘wingnuts’: 1}
現在我們可以用assignment expressions( :=,又稱walrus operator)來減少這些重覆語句的出現。
found = {name: batches for name in order
if (batches := get_batches(stock.get(name, 0), 8))}
print(found)
不過要小心assignment expressions可能會汙染comprehensions外的scope,所以本書只建議在if的區域使用assignment expressions。
half = [(last := count // 2) for count in stock.values()]
print(last)
#12
print(batches)
#0
但實際上if區域的變數也是會汙染,書中的建議原因不太確定為何。