Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 10, 2018 11:58:36

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

словари и функции

Добрый день. Есть такой код:

 def first():
    print('first')
def second():
    print('second')
def third():
    print('third')  
do = {
    '1': first(),
    '2': second(),
    '3': third()
}
do['1']
Результат выполнения:
 first
second
third
т.е. выполнились все три функции, а не та на которую указывает ключ. Почему?
Вопрос собственно не в том как исправить код для вызова конкретной функции из словаря, а почему его не происходит?.
Питон независимо от ключа загружает весь словарь целиком?
И, натыкаясь на вызов функции, выполняет его независимо от ключа?




Отредактировано SomethingButNotNickName (Янв. 10, 2018 12:03:01)

Офлайн

#2 Янв. 10, 2018 12:01:58

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

словари и функции

SomethingButNotNickName
Потому что вы не видите разницы между функцией как переменной и её вызовом

 do = {
    '1': first(),        # Вызвал функцию
    '2': second(),   # Вызвал функцию
    '3': third().      # Вызвал функцию
}

А в словаре у тебя все значения None, потому что там РЕЗУЛЬТАТЫ вызова функций, а не сами функции.



Офлайн

#3 Янв. 10, 2018 12:06:00

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

словари и функции

FishHook
SomethingButNotNickNameПотому что вы не видите разницы между функцией как переменной и её вызовом

Если я чего то не вижу, то Вам, как более опытному человеку, неплохо бы показать что, что я не вижу. А не ограничиваться общими фразами не отвечающими на поставленный вопрос.

Тем более, что это разницу я вижу, и то, что в словаре будут None понимаю.

Офлайн

#4 Янв. 10, 2018 12:18:26

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

словари и функции

SomethingButNotNickName

SomethingButNotNickName
что в словаре будут None понимаю
Ну если понимаешь, то что ты хочешь получить вот этим?
 do['1']
None? Ну разумно же, раз там None и ты об этом знаешь?

SomethingButNotNickName
А не ограничиваться общими фразами не отвечающими на поставленный вопрос.
Я надеялся, что ты сам догадаешься, но раз ты думать головой не хочешь, то вот решение

 do = {
    '1': first,        
    '2': second,   
    '3': third     
}
do['1']()

можно не благодарить



Офлайн

#5 Янв. 10, 2018 12:39:43

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

словари и функции

А благодарить то не за что.

SomethingButNotNickName
Вопрос собственно не в том как исправить код для вызова конкретной функции из словаря, а почему его не происходит?.

Офлайн

#6 Янв. 10, 2018 13:34:03

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

словари и функции

SomethingButNotNickName
Вопрос собственно не в том как исправить код для вызова конкретной функции из словаря, а почему его не происходит?.
потому что вы его не вызываете, вам же уже обьясняли.
 def first():
    print('first')
a['1']  = first() # вызов функции и присваивание результата работы функции ключу '1' словаря а
# оно выведет 'first', но значение в словаре будет None так как функция ничего не возвращает
a['1'] = first    #  ключу '1' словаря а теперь ссылаеться на функцию first
# оно ничего не выведет , значение ключа бдет чтото типа такого <function first at 0x02E66660>
a['1']()           # вызов функции first, оно напечатает  'first'



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version