Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2017 21:01:23

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по функции map()

Доброго времени суток, форумчане!

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

 map(print(x), [])

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

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

что логично, но почему число? и именно 2499?
UPD2
у меня какой то глюк отображения текста на форуме. Не отображается второй аргумент функции map. в моем примере это пустой список.

Отредактировано FishHook (Дек. 20, 2017 10:12:38)

Офлайн

#2 Дек. 20, 2017 04:46:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

вопрос по функции map()

SomethingButNotNickName
В третьем питоне все функции типа map и zip заменены на объекты-генераторы, они ленивые - пока вы не начнете их перебирать, никаких реальных вычислений не происходит. Проще всего сделать вот так

 list(map(func, items))



Офлайн

#3 Дек. 20, 2017 09:55:41

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по функции map()

вы неправильно меня поняли. я пишу команду:

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

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

Отредактировано SomethingButNotNickName (Дек. 20, 2017 10:54:03)

Офлайн

#4 Дек. 20, 2017 10:15:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

вопрос по функции map()

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



Офлайн

#5 Дек. 20, 2017 10:32:04

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по функции map()

в том то и проблема, что в среде которой я пользуюсь (SublimeREPL) он работает (пусть и некорректно). Значит среда настроена неправильно. По настройке REPL'a посоветуете что? Ну или варианты чем его заменить?

Офлайн

#6 Дек. 20, 2017 11:14:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

вопрос по функции map()

  
>>> 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
>>>



Офлайн

#7 Дек. 20, 2017 11:17:56

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по функции map()

py.user.next
не совсем понял к чему это? что мой код не рабочий и в правильно настроенной среде работать не должен - я уже понял (собственно именно ошибку я и ожидал увидеть когда первый раз его запускал, но увидел сие и пошел на форум)

Сейчас вопрос именно в настройке среды (SublimeREPL)

Офлайн

#8 Дек. 20, 2017 11:30:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

вопрос по функции map()

Посмотри внимательно на эту сессию интерпретатора и подумайте над каждым шагом что здесь происходит

 >>> 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]



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Дек. 20, 2017 11:31:55

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

вопрос по функции map()

Предвещая возможный вопрос - print функция печатает на экране значение, но не возвращает его



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#10 Дек. 20, 2017 11:51:58

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по функции map()

 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
но результат такой какой мы обсуждаем.

Отредактировано SomethingButNotNickName (Дек. 20, 2017 11:54:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version