В предыдущем посте мы обсудили синтаксис нового оператора присваивания. В личные сообщения я получил большое количество просьб продолжить, поэтому в этом посте мы рассмотрим частные случаи, когда морж в коде выглядит солидно.
Но для начала стоит отметить ещё один важный момент – моржовый оператор не создаёт новую область видимости:
if (n:= len(a)) > 10: print(f'Слишком много элементов')print(f'Количество элементов: {n}')Теперь к практичным примерам использования.
1. Повторно используем значение в списке:
foo = [y:= f(x), y * 2, y * 3]# вместоfoo = [f(x), f(x) * 2, f(x) * 3]2. Повторное использование значения из условия в генераторных выражениях:
[y for x in data if (y:=f(x))]# вместоresult = []for x in data: result = f(x) if result: results.append(result)3. Чтение данных из файла внутри циклов while:
while (block := f.read(256)) != '': process(block)# вместо while True: stuff() if fail_condition: break