История изменений
Исправление byko3y, (текущая версия) :
С точки зрения понимаемости и модульности изменение значения переменной по месту аля многие вариации тьюринговой трясины — зло и применяется там, где без этого вполне можно обойтись. Смотри сюда:
first_shortest_word = None
a = ['Вася', 'ел', 'бананы']
for word in a:
if first_shortest_word is None:
first_shortest_word = ShortestWord(word, len(word))
else:
if first_shortest_word.length > len(word):
first_shortest_word = ShortestWord(word, len(word))
print(first_shortest_word)
Ты спросишь «а что же мне делать, если я захочу сделать манкипатч для объекта ShortestWord, но при пересоздании объекта все изменения потеряются» — я отвечу «ССЗБ, в этом и весь смысл моего ответа: изолировать одни модули от эффектов остальных модулей».
С точки зрения производительности разницы между моим и твоим кодом нет, поскольку в CPython это все равно будет создание-пересоздание объектов-контейнеров, а какое-нибудь PyPy выкинет все контейнеры и положит word и length в регистры.
Исходная версия byko3y, :
С точки зрения понимости и модульности изменение значения переменной по месту аля многие вариации тьюринговой трясины — зло и применяется там, где без этого вполне можно обойтись. Смотри сюда:
first_shortest_word = None
a = ['Вася', 'ел', 'бананы']
for word in a:
if first_shortest_word is None:
first_shortest_word = ShortestWord(word, len(word))
else:
if first_shortest_word.length > len(word):
first_shortest_word = ShortestWord(word, len(word))
print(first_shortest_word)
Ты спросишь «а что же мне делать, если я захочу сделать манкипатч для объекта ShortestWord, но при пересоздании объекта все изменения потеряются» — я отвечу «ССЗБ, в этом и весь смысл моего ответа: изолировать одни модули от эффектов остальных модулей».
С точки зрения производительности разницы между моим и твоим кодом нет, поскольку в CPython это все равно будет создание-пересоздание объектов-контейнеров, а какое-нибудь PyPy выкинет все контейнеры и положит word и length в регистры.