Python:使用字典作为交换机不工作

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是函数对象本身.


Yan*_*min 3

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 (不是调用该函数!),同样用于退出。请记住,函数是第一类对象:可以对它们进行赋值、存储和从其他变量调用。