我在我的应用程序中使用字典作为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选项。
如何重命名字典项并仍然将其用作案例陈述选项?
答案 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")