В Python 2 вы можете избежать временной копии всех значений с помощью метода itervalues()
словаря, который возвращает итератор ключей словаря:
sum(d.itervalues())
В Python 3 вы можете просто используйте d.values()
, потому что этот метод был изменен, чтобы сделать это (и itervalues()
был удален, так как он больше не нужен).
Для того, чтобы упростить написание версии независимого кода, который всегда перебирает значения ключей словаря, функция полезности может быть полезна:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
Это, по существу, что делает six
модуля Бенджамина Петерсона.
Просто для удовольствия: реализовать 'sum' самостоятельно в терминах' 'сокращение'' (http://docs.python.org/library/functions.html) -' reduce' является более общей формой (например, ' sum', 'min' и' max' могут быть записаны в терминах 'reduce') и могут легко решить другие проблемы (например,' product'). –
Как насчет высказывания Гвидо - я думаю, что я правильно помню это, что сокращение уходит? Я с тобой. Зачем убирать его с языка? – octopusgrabbus