gpt4 book ai didi

Python "Switch-Case"替代显示错误

转载 作者:行者123 更新时间:2023-11-30 23:14:14 28 4
gpt4 key购买 nike

在遵循一些代码后,我试图使用字典Python中实现类似switch-caseC 。我有以下代码。

case = {'1': "case_1", '2': "case_2"}


def case_1():
print "case 1"


def case_2():
print "case 2"

x = raw_input("Enter 1 or 2 :")

if x == '1' or x == '2':
print case[x]
case_1()
case[x]()
else:
print "Please enter 1 or 2 only"

我得到的输出和错误如下所示。

Enter 1 or 2 :1
case_1
case 1
Traceback (most recent call last):
File "test.py", line 17, in <module>
case[x]()
TypeError: 'str' object is not callable

谁能告诉我这里出了什么问题吗?

最佳答案

代码中的实际问题是,您正在根据键存储字符串值。当你这样做时,case[x] ,它只为您提供字符串值,并且您尝试将它们作为函数调用。这就是为什么你会得到

TypeError: 'str' object is not callable

您可以通过将函数对象本身存储在字典中来修复它,如下所示

def case_1():
print "case 1"

def case_2():
print "case 2"

case = {'1': case_1, '2': case_2}

现在,首先定义函数(这很重要,因为在定义函数对象之前不能使用函数对象),然后将它们存储在字典对象中。所以,当代码

case[x]()

已执行,case[x]实际上会返回函数对象,您可以像您尝试做的那样直接调用它。

注意:这实际上称为“命令模式”。您可以在 this answer 中阅读更多相关信息。 .

<小时/>

还有另一种方法可以让你的程序正常工作。但我不会推荐它。 您实际上可以通过从 globals() 获取函数对象来调用与字符串对应的函数对象。字典,像这样globals()[case[x]]() .

关于Python "Switch-Case"替代显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com