我尝试编写一个处理键盘输入并执行正确函数的方法(可选择使用一些参数)。因此,我使用带有一些键盘映射的dict,如
mappings = {
'q' : (quit , None),
KEY_HOME : (move_to_line , 1),
KEY_END : (move_to_line , widget.last_line)
}
处理程序函数本身如下:
def handle_input(user_input):
if user_input in mappings.keys():
func = mappings[user_input][0]
args = mappings[user_input][1]
if args == None:
func()
elif type(args) == list:
func(*args)
elif type(args) == dict:
func(**args)
else:
func(args)
现在,该函数适用于前两个dict条目。如果是第三个条目,则widget.last_line
更改时无效。 python编译器似乎将此条目作为常量值处理,即使它是小部件的属性。有没有办法保持这样的条目" volatile",还是有更好的方法来执行这样的操作?
答案 0 :(得分:2)
无法以您希望的方式存储对属性的引用。你可以做的是写一个新的函数,在调用它时获取属性,然后将那时的值传递给move_to_line
:
KEY_END : (lambda: move_to_line(widget.last_line), None)
答案 1 :(得分:1)
更改上一条:KEY_END : (move_to_last_line , widget)
move_to_last_line
的位置:
def move_to_last_line(widget):
move_to_line(widget.last_line)
答案 2 :(得分:0)
我认为即使它是属性,属性的值也会改变。考虑一下:class Person:name p =人('迈克') dict [p.name] =某事
当你将p.name改为'Joe'时,你是否希望字典映射神奇地改为dict ['Joe']?