# Про PEP-572 (Assignment Expressions) [PEP-572](https://www.python.org/dev/peps/pep-0572/) -- тренд недели в Python сообществе. Данный PEP добавляет в Python [синтаксис присваивания](https://www.python.org/dev/peps/pep-0572/#syntax-and-semantics), который можно использовать внутри if, for, while, list comprehensions. И вот этот PEP Гвидо ван Россум принял в этот вторник, ждите фичу в Python 3.8. А причина оживлённой дискуссии в том, что это поощряет плохой код и является ужасно неинтуитивным. 91% Python core developers [проголосовал против данного PEP](https://www.mail-archive.com/python-committers@python.org/msg05324.html). Ниже я рассказываю, что же с этим синтаксисом, по моему мнению, не так. ## Читаемость Вот пример из документации: ```python if any((comment := line).startswith('#') for line in lines): print("First comment:", comment) else: print("There are no comments") ``` А вот я переписал его для вас на pythonic код: ```python for line in lines: if line.startswith('#'): print("First comment:", line) break else: print("There are no comments") ``` ## Болезненная итерация Ещё одна проблема в том, что из Python будут делать PHP Python стиль итерации: ```python for user in get_users(): ... ``` PHP стиль итерации: ```python while user := get_users(): ... ``` ## Стреляем в ногу А ещё с таким синтаксисом сделать больно очень просто: ```python [(y := z(x), y) for x in data if (y := f(x)) is not None] ``` ## Сжимаем Но основная проблема в том, что код становится очень сжатым. Это ведь Python, а не Perl. Вот пример из документации: ```python filtered_data = [y for x in data if (y := f(x)) is not None] ``` Нормальный подход -- не пытаться всё запихнуть в генераторы списков: ```python filtered_data = [] for x in data: y = f(x) if y is not None: filtered_data.append(y) ``` Боитесь, что в файле закончатся строки? Я -- нет. И не то чтобы генераторы списков сейчас не позволяют сделать то же самое: ```python filtered_data = [y for y in (f(x) for x in data) if y is not None] ``` ## Что дальше? В общем, боюсь, нас впереди ждёт много страшного кода в Open Source проектах, так что держитесь. Ну и резюмируя. Так стоит ли использовать новый синтаксис, когда он приедет в Python? Почему бы и нет. Тут всё как всегда: думайте головой и не пишите плохой код. Be happy.