LINUX.ORG.RU

История изменений

Исправление 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 в регистры.