我正在尝试在python中创建一个选项菜单,如果用户选择一个数字,则执行不同的函数:
def options(x):
return {
1: f1(),
2: f2()
}[x]
def f1():
print "hi"
def f2():
print "bye"
但是,我打电话
options(1)
我明白了:
hi
bye
同样在我致电options(2)
发生了什么事?
答案 0 :(得分:7)
您正在调用函数,而不是根据键分配它们
def f1():
print "hi"
def f2():
print "bye"
functions = {1: f1, 2: f2} # dict of functions (Note: no parenthesis)
def options(x):
return functions[x]() # Get the function against the index and invoke it
options(1)
# hi
options(2)
# bye
答案 1 :(得分:1)
您的词典是使用函数的返回值构建的;在从dict中选择函数之前不要调用该函数:
def options(x):
return {
1: f1,
2: f2
}[x]()
现在您只存储对字典中函数的引用,并在检索后调用所选函数。
演示:
>>> def f1():
... print "hi"
...
>>> def f2():
... print "bye"
...
>>> def options(x):
... return {
... 1: f1,
... 2: f2
... }[x]()
...
>>> options(1)
hi
>>> options(2)
bye
答案 2 :(得分:0)
用返回替换打印并返回,然后它将起作用。或者使用thefourtheye版本。
答案 3 :(得分:0)
问题是在构建字典时调用函数(使用()
)。关闭parens并在获得字典中的值后才能应用它们:
def options(x):
return {
1: f1,
2: f2
}[x]()