2
我試圖用openGL來真正聰明,並將所有函數及其變量以邏輯順序存儲在字典中,然後再按函數順序調用它們。函數作爲字典鍵,難以置信的類型
def complex_draw_square(width, height, x=0, y=0, z=0, x_angle=0, y_angle=0, z_angle=0,):
action_dict = {
glPopMatrix: "E",
glRectf: (0, 0, width, height),
glTranslatef: (0, -height, 0),
glRotatef: (x_angle, y_angle, z_angle, 1),
glTranslatef: (x, y + height, z),
glPushMatrix: "E"
}
return action_dict
的問題是,當我試圖做到這一點我獲取文件
"/Users/lego90511/PycharmProjects/OpenGLDummy/opengl_shortcuts.py", line 9, in complex_draw_square
glPopMatrix: "E",
TypeError: unhashable type
我得到這個無論哪個函數的變量組合,我有。奇怪的是,我在終端上使用自定義功能來嘗試此功能。
def sum(x,y):
return x + y
d = {sum: (1, 2)}
for f in d.keys():
print f(*d[f])
>>>3
而且這個工作。那麼爲什麼其他人不工作?
「店[...]在邏輯順序字典」。字典是無序的。 – NPE
你知道Python字典*沒有訂單*,對嗎? –
在我的腦海中,我猜測它有處理哈希衝突的一些事情,但爲了爭論,讓我們說不。 dict.keys()仍然按照預期的順序吐出鑰匙,他們不會? – EasilyBaffled