Использование функций в словаре для меню - PullRequest
2 голосов
/ 09 июля 2019

Я пытаюсь создать простое меню, используя словарь вместо серии операторов if, elif.Моя проблема в том, что функции вызываются, когда я объявляю их как определение в словаре.Также я сталкиваюсь с ошибкой при попытке вызвать словарь.

Я знаю, что что-то упустил в объявлении.Неважно, что я добавлю в определение: если это исполняемый код, то он выполняется при объявлении, а не когда я его вызываю.

Что касается проблемы с вызовом словаря, то я полностью потерянИз всего, что я прочитал, я считаю, что я делаю это правильно.Я включил слишком упрощенную версию того, что я пытаюсь сделать, которая повторяет проблемы, с которыми я сталкиваюсь.

def hello():
    print("Hello")

def goodbye():
    print("Goodbye")

options = { '1' : hello(),
            '2' : goodbye()}

chosen = '1'

options[chosen]()

Это то, что я получаю при выполнении вышеизложенного.

Hello
Goodbye
Traceback (most recent call last):
  File "main.py", line 12, in <module>
    options[chosen]()
TypeError: 'NoneType' object is not callable

И я должен просто увидеть это.

Hello

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Просто удалите скобки из функций в словаре. Если оставить их там, функции будут вызываться при объявлении словаря.

Кроме того, вы получаете ошибку, потому что значения, которые вы вводите в словарь, являются возвращаемыми значениями функций, то есть None, а вызов None() вас никуда не приведет; -)

0 голосов
/ 09 июля 2019

Просто назначьте имя функции в качестве значения в словаре

def hello():
    print("Hello")


def goodbye():
    print("Goodbye")


options = {'1': hello,
           '2': goodbye}

chosen = '1'

options[chosen]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...