python - 所有键都在字典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
谁能告诉我原因。
解决方案
您没有存储功能。您正在存储函数调用的结果。不调用函数对象,调用调用的结果dict.get()
:
switcher = {
1: addWord,
2: searchWord,
3: displayAll,
}.get(choice, lambda: "Invalid input")()
在 Python 中,函数只是对象,()
部分只是一段可以应用于任何表达式的语法;只要表达式产生可调用的东西(如函数对象),那么 Python 就可以了。
请注意,我为该dict.get()
方法lambda
提供了默认表达式;如果该choice
值不是字典中的键,您仍然需要返回可调用的内容。
推荐阅读
- javascript - 在动态页面中页面加载后显示/隐藏元素
- git - 用于检查具有潜在上游更改的最新版本分支的 Git 脚本
- javascript - 如何调整 D3 轮廓的大小
- python - 您可以使用元素 ID 来检查元素是否可点击
- google-sheets - Google Sheets MATCH 字符串并向右返回 OFFSET 2 列
- mongodb - rs.initiate() 为副本集设置 docker-compose 时出现问题
- docker - Confluence docker:找不到指定的 Dockerfile
- webview2 - WebView2 控件不在工具箱中
- autohotkey - 如果 WinExist 使用变量和 RegEx
- asp.net-core - 将列表从 Razor 页面传递到代码后面,然后使用 Dapper 进行批量插入