使用函数值访问python dict

时间:2014-03-05 13:38:30

标签: python function dictionary

我正在尝试在python中创建一个选项菜单,如果用户选择一个数字,则执行不同的函数:

def options(x):
    return {
        1: f1(),
        2: f2()
    }[x]

def f1():
    print "hi"

def f2():
    print "bye"

但是,我打电话

options(1)

我明白了:

hi
bye

同样在我致电options(2)

发生了什么事?

4 个答案:

答案 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]()