Форум сайта python.su
Доброго времени суток, форумчане!
map() применяет переданную функцию к каждому элементу в переданном списке (списках) и возвращает список результатов (той же размерности, что и входной) (с)
НО!!!
map(print(x), [])
Отредактировано FishHook (Дек. 20, 2017 10:12:38)
Офлайн
SomethingButNotNickName
В третьем питоне все функции типа map и zip заменены на объекты-генераторы, они ленивые - пока вы не начнете их перебирать, никаких реальных вычислений не происходит. Проще всего сделать вот так
list(map(func, items))
Офлайн
вы неправильно меня поняли. я пишу команду:
map(print(x), [])
Отредактировано SomethingButNotNickName (Дек. 20, 2017 10:54:03)
Офлайн
SomethingButNotNickNameВаш код вообще не может работать, потому что переменная x не определена
вы неправильно меня поняли.
Офлайн
в том то и проблема, что в среде которой я пользуюсь (SublimeREPL) он работает (пусть и некорректно). Значит среда настроена неправильно. По настройке REPL'a посоветуете что? Ну или варианты чем его заменить?
Офлайн
>>> list(map(print('a'), [1, 2, 3])) a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not callable >>>
Офлайн
py.user.nextне совсем понял к чему это? что мой код не рабочий и в правильно настроенной среде работать не должен - я уже понял (собственно именно ошибку я и ожидал увидеть когда первый раз его запускал, но увидел сие и пошел на форум)
Офлайн
Посмотри внимательно на эту сессию интерпретатора и подумайте над каждым шагом что здесь происходит
>>> def mul(value): ... return value * 10 ... >>> values = [1, 2, 3] >>> result = map(mul, values) >>> print(result) <map object at 0x104d0b5f8> >>> print(list(result)) [10, 20, 30] >>> >>> nothing = list(map(lambda x: print(x), values)) 1 2 3 >>> print(nothing) [None, None, None]
Офлайн
Предвещая возможный вопрос - print функция печатает на экране значение, но не возвращает его
Офлайн
def mul(value): ... return value * 10 #объявление функции которая жрет число и возвращает его увеличенным в 10 раз ... >>> values = [1, 2, 3] #присвоение переменной списка с числами от 1 до 3 >>> result = map(mul, values)#присвоение переменной результата работы функции map(). map применяет функ mul к числам списка в итоге получает map object со списком внутри >>> print(result) #закономерное получение map object <map object at 0x104d0b5f8> >>> print(list(result)) #раскрытие map object и получение списка [10,20,30] [10, 20, 30] >>> >>> nothing = list(map(lambda x: print(x), values)) 1 2 3 >>> print(nothing) [None, None, None]
Отредактировано SomethingButNotNickName (Дек. 20, 2017 11:54:40)
Офлайн