NameError: глобальное имя «уменьшить» не определено

Я новичок в Python. Подскажите, пожалуйста, что не так со следующим кодом? Когда я запускаю его, я получаю сообщение об ошибке «NameError: глобальное имя« уменьшить »не определено». Гугл спрашивал, но бесполезно. :(

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))

if __name__=='__main__':
    main()

person anhldbk    schedule 19.04.2012    source источник
comment
Одна из причин, по которой reduce была удалена из встроенных, заключалась в том, что она часто использовалась для добавления, где sum предпочтительнее (в этом случае вы могли просто сделать sum(range(1, 11)) или sum(xrange(1, 11)) в Python 2). Также обратите внимание, что в стандартной библиотеке есть функция add, эквивалентная вашей: operator.add.   -  person James    schedule 19.04.2012


Ответы (2)


Я собираюсь предположить, что:

  1. Вы используете Python 3 и
  2. Вы следуете руководству, разработанному для Python 2.

Функция reduce, поскольку она редко используется, была удалена из встроенных функций в Python 3. Она по-прежнему доступна в модуле functools, так что вы можете сделать:

import functools

def main():
    def add(x,y): return x+y
    functools.reduce(add, range(1, 11))
person Greg Hewgill    schedule 19.04.2012
comment
так как это не обычно используется, является спорным. - person hcalves; 13.04.2013

Также

# Import reduce from functools
from functools import reduce

Позволяет вам использовать reduce, как если бы это была встроенная функция.

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))
person chim    schedule 28.02.2018