Найти - Пользователи
Полная версия: вопрос по функции map()
Начало » Python для новичков » вопрос по функции map()
1 2
SomethingButNotNickName
Доброго времени суток, форумчане!

map() применяет переданную функцию к каждому элементу в переданном списке (списках) и возвращает список результатов (той же размерности, что и входной) (с)
НО!!!

 map(print(x), [])

на сколько я понимаю функция print() должна примениться к каждому элементу списка, но по факту на выходе “2499”
причем не зависимо от переданного списка. Кто пояснит сие?

UPD
>>>print(type(map(print(x), )))
class ‘map’

что логично, но почему число? и именно 2499?
UPD2
у меня какой то глюк отображения текста на форуме. Не отображается второй аргумент функции map. в моем примере это пустой список.
FishHook
SomethingButNotNickName
В третьем питоне все функции типа map и zip заменены на объекты-генераторы, они ленивые - пока вы не начнете их перебирать, никаких реальных вычислений не происходит. Проще всего сделать вот так
 list(map(func, items))
SomethingButNotNickName
вы неправильно меня поняли. я пишу команду:
 map(print(x), []) 
на выходе получаю “нечто” имеющее вид 2499 - это вчера!
сегодня тот же самый код выдает 349!
type() от выше описанной конструкции <class map>
одни и те же действия дают различный результат Т_Т
работаю в SublimeREPL (третий) и похоже проблема именно в нем так как CMD->python такую команду вообще не переваривает (NameError: name ‘x’ is not defined). Если команда не переваривается командной строкой значит она (команда) не верна, правильно?
Также за REPL'ом замечены и другие странности.

В силу выше сказанного - посоветуете живой форум где можно пообщаться на тему настройки REPL'a?

FishHook
SomethingButNotNickName
вы неправильно меня поняли.
Ваш код вообще не может работать, потому что переменная x не определена

SomethingButNotNickName
в том то и проблема, что в среде которой я пользуюсь (SublimeREPL) он работает (пусть и некорректно). Значит среда настроена неправильно. По настройке REPL'a посоветуете что? Ну или варианты чем его заменить?
py.user.next
  
>>> 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
>>>
SomethingButNotNickName
py.user.next
не совсем понял к чему это? что мой код не рабочий и в правильно настроенной среде работать не должен - я уже понял (собственно именно ошибку я и ожидал увидеть когда первый раз его запускал, но увидел сие и пошел на форум)

Сейчас вопрос именно в настройке среды (SublimeREPL)
JOHN_16
Посмотри внимательно на эту сессию интерпретатора и подумайте над каждым шагом что здесь происходит
 >>> 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]
JOHN_16
Предвещая возможный вопрос - print функция печатает на экране значение, но не возвращает его
SomethingButNotNickName
 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]  


Во втором примере все опять же логично и понятно.
1) map применяет функцию лямбда (в которой прячется print())к списку чисел.
2) лямбда(т.е. print()) печатает элементы списка внутрь map object
3) list() разворачивает map oject и в консоль выводятся элементы списка
4) переменной nothing присваиваются три None так как лямбда( т.е. print()) только печатает, но не возвращает значения.
Если накосячил в терминологии - прошу поправить. Но суть работы скрипта такая.
А теперь вернемся к моему вопросу!!!!!!!!!!!!!!!!!!!!!!!!!

Мой интерпретатор жрет заведомо не корректный код и до кучи на один и тот же код выдает разные результаты.

Сейчас sublime настроен в соответствии с
https://www.youtube.com/watch?v=Av_m_kbnzuY
но результат такой какой мы обсуждаем.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB