首页 > 解决方案 > 所有键都在字典python中被选中

问题描述

我正在尝试使用字典编写开关盒,并从它们中调用函数。但是这些{key,value}对都被打印出来了:

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

谁能告诉我原因。

标签: pythonpython-2.7dictionaryswitch-statement

解决方案


您没有存储功能。您正在存储函数调用的结果。不调用函数对象,调用调用的结果dict.get()

switcher = {
    1: addWord,
    2: searchWord,
    3: displayAll,
}.get(choice, lambda: "Invalid input")()

在 Python 中,函数只是对象,()部分只是一段可以应用于任何表达式的语法;只要表达式产生可调用的东西(如函数对象),那么 Python 就可以了。

请注意,我为该dict.get()方法lambda提供了默认表达式;如果该choice值不是字典中的键,您仍然需要返回可调用的内容。


推荐阅读