You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用字典模拟Switch Case时所有关联函数均被执行的原因咨询

问题:字典模拟Switch Case时所有函数被提前执行的原因及解决方法

你遇到的问题是在尝试用字典实现类似Switch Case的逻辑时,不管选择哪个选项,所有函数的输出都被打印出来了。先来看下你的代码和实际输出:

你的代码

def addWord(): print "Add word"
def searchWord(): print "Search word"
def displayAll(): print "display all"

#Executing the choice
def switch_choice(choice):
    switcher = {
        1:addWord(),
        2:searchWord(),
        3:displayAll()
    }.get(choice,"Invalid input")

#MAIN
print "Enter your choice"
print "1.Add new word"
print "2.Search for a word"
print "3.Display all words"
choice=input()
switch_choice(choice)

实际输出

Enter your choice
1.Add new word
2.Search for a word
3.Display all words
1
Add word
Search word
display all

问题原因

核心问题出在字典的定义上:你在字典中写1:addWord()的时候,加了括号的函数调用会立即执行。也就是说,当switcher这个字典被创建的瞬间,addWord()、searchWord()、displayAll()这三个函数就全部被运行了,这和你后面输入的choice没有任何关系——不管你选1、2还是3,这三个函数在字典初始化时就已经执行完毕了。

而.get(choice)只是在这三个函数执行后的返回值里(这里函数没有return,所以返回None)找对应key的值,根本没起到“根据选择执行对应函数”的作用。


解决方法

要实现真正的“根据选择调用对应函数”,你需要把字典的值改成函数本身(不要加括号),也就是存储函数的引用,等获取到对应的函数后再调用它。

修正后的代码如下:

def addWord(): print "Add word"
def searchWord(): print "Search word"
def displayAll(): print "display all"

#Executing the choice
def switch_choice(choice):
    switcher = {
        1: addWord,
        2: searchWord,
        3: displayAll
    }
    # 获取对应的函数,不存在则用处理无效输入的匿名函数
    selected_func = switcher.get(choice, lambda: print("Invalid input"))
    selected_func()  # 调用选中的函数

#MAIN
print "Enter your choice"
print "1.Add new word"
print "2.Search for a word"
print "3.Display all words"
choice = input()
switch_choice(choice)

修正逻辑说明

  1. 字典中存储的是函数对象(比如1: addWord),此时函数不会执行,只是把函数的引用存在字典里;
  2. 通过.get(choice)获取到对应的函数后,再用selected_func()来执行它;
  3. 对于无效输入,我们用lambda定义了一个匿名函数来处理默认情况,这样所有分支的逻辑都是“获取函数→调用函数”,更统一。

现在再运行代码,输入1只会打印Add word,输入2打印Search word,输入3打印display all,输入其他值会打印Invalid input,完全符合你的预期。

内容的提问来源于stack exchange,提问作者rittik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:36:07