Python "switch-case"字典没有执行函数?
Python "switch-case" dictionary is not executing functions?
我遵循了很多关于如何在 Python 中创建字典来代替 switch-case 语句的示例,但由于某种原因,我的代码似乎无法正常工作。函数 ViewCommands,当输入“viewCommands”(作为命令)时,它应该像在脚本开头那样执行,但没有被执行。
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, '!');
if case == '!': print('!>> INVALID INPUT - NOT AN OPTION')
当我为每个引用添加括号时...像这样:
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands(),
'terminate': Terminate(),
'viewSentences': ViewSentences(),
'addSentences': AddSentences()
}
case = switcher.get(command, '!');
if case == '!': print('!>> INVALID INPUT - NOT AN OPTION')
...它确实按预期调用,但后来我遇到了一个错误,即意外调用终止,尽管它不应该在字典查询中被引用。
有谁知道我为什么会遇到这个问题?如有任何建议,我们将不胜感激,并提前致谢!
在 python 函数调用中关闭括号 )
的那一刻,它将被执行,无论它在哪里。这就是第二段代码中发生的情况:Terminate() 正在执行,但您不希望它在那里执行。您在上一节中拥有的代码是可行的方法。 case
变量赋值后,就可以执行最后加括号的函数了。
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, '!');
if case == '!':
print('!>> INVALID INPUT - NOT AN OPTION')
else:
case()
PS:我无法检查代码,因为您没有提供 ViewCommands、Terminate、ViewSentences 和 AddSentences 的作用,或者它们接收哪些参数。
这是一种使其更短并避免不必要的 if 语句的方法。 Lambda 函数确实很漂亮,不是吗?
我在后面加了一个()
,因为字典case语句得到的是函数对象,由后面的()执行,和lambda函数一样。
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, lambda: print('!>> INVALID INPUT - NOT AN OPTION'))()
直到Python3.10出来match/case声明,可以定义一个switch函数,可以让代码更可口,更容易维护:
开关函数是这样的:
def switch(v): yield lambda *c: v in c
您可以将其用于 if/elif/else ...
for case in switch(command):
if case('viewCommands') : ViewCommands()
elif case('terminate') : Terminate()
elif case('viewSentences'): ViewSentences()
elif case('addSentences') : AddSentences()
else: print("bad command")
或者以更像 C 的方式...
for case in switch(command):
if case('viewCommands') : ViewCommands() ; break
if case('terminate') : Terminate() ; break
if case('viewSentences'): ViewSentences() ; break
if case('addSentences') : AddSentences() ; break
else: print("bad command")
我遵循了很多关于如何在 Python 中创建字典来代替 switch-case 语句的示例,但由于某种原因,我的代码似乎无法正常工作。函数 ViewCommands,当输入“viewCommands”(作为命令)时,它应该像在脚本开头那样执行,但没有被执行。
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, '!');
if case == '!': print('!>> INVALID INPUT - NOT AN OPTION')
当我为每个引用添加括号时...像这样:
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands(),
'terminate': Terminate(),
'viewSentences': ViewSentences(),
'addSentences': AddSentences()
}
case = switcher.get(command, '!');
if case == '!': print('!>> INVALID INPUT - NOT AN OPTION')
...它确实按预期调用,但后来我遇到了一个错误,即意外调用终止,尽管它不应该在字典查询中被引用。
有谁知道我为什么会遇到这个问题?如有任何建议,我们将不胜感激,并提前致谢!
在 python 函数调用中关闭括号 )
的那一刻,它将被执行,无论它在哪里。这就是第二段代码中发生的情况:Terminate() 正在执行,但您不希望它在那里执行。您在上一节中拥有的代码是可行的方法。 case
变量赋值后,就可以执行最后加括号的函数了。
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, '!');
if case == '!':
print('!>> INVALID INPUT - NOT AN OPTION')
else:
case()
PS:我无法检查代码,因为您没有提供 ViewCommands、Terminate、ViewSentences 和 AddSentences 的作用,或者它们接收哪些参数。
这是一种使其更短并避免不必要的 if 语句的方法。 Lambda 函数确实很漂亮,不是吗?
我在后面加了一个()
,因为字典case语句得到的是函数对象,由后面的()执行,和lambda函数一样。
ViewCommands()
while True:
print()
print('?>> What command would you like to execute?:')
command = input()
print('>>> Executing command: ', command)
switcher = {
'viewCommands': ViewCommands,
'terminate': Terminate,
'viewSentences': ViewSentences,
'addSentences': AddSentences
}
case = switcher.get(command, lambda: print('!>> INVALID INPUT - NOT AN OPTION'))()
直到Python3.10出来match/case声明,可以定义一个switch函数,可以让代码更可口,更容易维护:
开关函数是这样的:
def switch(v): yield lambda *c: v in c
您可以将其用于 if/elif/else ...
for case in switch(command):
if case('viewCommands') : ViewCommands()
elif case('terminate') : Terminate()
elif case('viewSentences'): ViewSentences()
elif case('addSentences') : AddSentences()
else: print("bad command")
或者以更像 C 的方式...
for case in switch(command):
if case('viewCommands') : ViewCommands() ; break
if case('terminate') : Terminate() ; break
if case('viewSentences'): ViewSentences() ; break
if case('addSentences') : AddSentences() ; break
else: print("bad command")