Python:如何重命名字典项并仍将其用作case语句选项?

时间:2015-03-19 18:46:32

标签: python dictionary

我在我的应用程序中使用字典作为case语句。我需要重命名字典项,但仍然使用字典作为case语句。为了说明我想要做的事情,我创建了这个例子。

def venus():
    print 'Venus'

def mars():
    print 'Mars'

def earth():
    print 'Earth'

def pluto():
    print 'Pluto'

options = { '1': venus, '2': mars, '3': earth}

options['1']()
options['2']()
options['3']()

options['1'] = 'pluto'

options['1']()

如果您运行它将打印出以下内容:

Venus
Mars
Earth
Traceback (most recent call last):
  File "dict.py", line 22, in <module>
    options['1']()
TypeError: 'str' object is not callable

在你问之前,不能只是在词典中添加另一个条目来捕捉Pluto选项。

如何重命名字典项并仍然将其用作案例陈述选项?

3 个答案:

答案 0 :(得分:3)

不要将其作为字符串传递。您需要将字典引用更改为您的函数对象pluto ...而不是string 'pluto'

options['1'] = pluto

答案 1 :(得分:0)

为什么要在函数字符串中包含函数pluto

完成定义字典时所做的事情

options['1'] = pluto #assign the function directly
options['1']() # prints Pluto

答案 2 :(得分:0)

您需要添加一个返回"pluto"的函数。

options['1'] = lambda: "pluto"

或者您可以定义一个将字符串转换为函数的函数

def to_func(s):
    return (lambda: s)

options['1'] = to_func("pluto")