Aus*_*ron 6 python switch-statement data-structures
我是'python neophyte'并试图掌握字典数据类型的内部工作原理.昨晚我试图在openGL程序中使用一个作为控制结构(即switch语句)进行键盘输入.
该问题是,由于某种原因,字典保持,而不是仅仅从按下键的一个评估(在这种情况下为两个)的所有情况.
这是一段代码示例:
def keyboard(key):
values = {
110: discoMode(),
27: exit()
}
values.get(key, default)()
Run Code Online (Sandbox Code Playgroud)
我昨晚花了一个小时或更长时间试图找到为什么每个'案例'都被评估的答案,我有一些想法,但是无法清楚地找到"为什么"问题的答案.
那么,有人能够向我解释为什么当我点击'n'键(ascii表示为110)时,这段代码也会评估27下的条目(ESC键)?
如果这个话题被打死了,我很抱歉,但我看起来并且无法轻易找到明确的答案(也许我错过了).
谢谢.
Sve*_*ach 15
你不应该调用这些函数.只需将函数对象本身存储在字典中,而不是它们的返回值:
def keyboard(key):
values = {
110: discoMode,
27: exit
}
values.get(key, default)()
Run Code Online (Sandbox Code Playgroud)
f()是对函数的调用,f并计算此调用的返回值. f是函数对象本身.
def keyboard(key):
values = {
110: discoMode(),
27: exit()
}
Run Code Online (Sandbox Code Playgroud)
在本例中,您正在构建一个字典,其中包含分配给 110 的“discoMode()”返回值和分配给 27 的“exit()”返回值。
你本来想写的是:
def keyboard(key):
values = {
110: discoMode,
27: exit
}
Run Code Online (Sandbox Code Playgroud)
这会将 110 分配给函数 discoMode (不是调用该函数!),同样用于退出。请记住,函数是第一类对象:可以对它们进行赋值、存储和从其他变量调用。