Теперь, когда PEP 572 принято, Python 3.8 предназначен для использования выражений присваивания, поэтому мы можем использовать выражение присваивания в with
, т.е.
with (f := open('file.txt')):
for l in f:
print(f)
вместо
with open('file.txt') as f:
for l in f:
print(f)
и все будет работать как раньше.
Как используется ключевое слово as
с оператором with
в Python 3.8? Разве это не против дзен Python: "Должен быть один - и, предпочтительно, только один - очевидный способ сделать это"?
Когда функция была первоначально предложена, не было четко указано, должно ли выражение присваивания заключаться в скобки в with
и что
with f := open('file.txt'):
for l in f:
print(f)
может работать. Однако в Python 3.8a0
with f := open('file.txt'):
for l in f:
print(f)
вызовет
File "<stdin>", line 1
with f := open('file.txt'):
^
SyntaxError: invalid syntax
но выражение в скобках работает.