Я часто думал об этом при программировании на Java или C #, когда вы обнаруживаете, что повторяете не одну, а часто одни и те же две или более ссылки на объекты по обе стороны от задания - например, у вас есть член какого-то объекта это строка, и вы хотите вызвать некоторые методы этой строки и присвоить ее обратно переменной-члену. Как ни странно, это не беспокоило меня почти так же сильно в Python.
Оператор .=
, который вы предлагаете, является одной идеей, о которой я подумал в то время, когда занимался C #. Другой вариант - разрешить использование начальной точки в качестве сокращения для назначаемого объекта, например:
foo.bar.str = .lower() # same as foo.bar.str = foo.bar.str.lower()
Pascal, Modula-2 и Visual Basic имеют оператор with
(отличающийся от оператора Python с тем же именем), который позволил бы вам написать что-то подобное, если бы оно существовало в Python (я называю это "использование" здесь так что это не принято за действительный Python):
using foo.bar:
str = str.lower() # same as foo.bar.str = foo.bar.str.lower()
Это очень удобно, когда вы собираетесь делать много манипуляций с членами одного объекта, так как он допускает блок. Тем не менее, у вас все еще есть уровень избыточности, который можно было бы устранить, если бы вы объединили две последние идеи следующим образом:
using foo.bar:
str = .lower()
Мне кажется, что это было бы немного синтаксического сахара, и я нахожу его очень удобочитаемым, но не похоже, что он занимает высокое место в списке приоритетов большинства разработчиков языков. Однако, поскольку у Python есть влияние Modula-2, возможно, не исключено, что он в конечном итоге будет добавлен.