python - 将函数映射和参数存储在字典中

标签 python dictionary python-curses

我尝试编写一个方法来处理键盘输入并执行适当的函数(可选地带有一些参数)。因此我使用带有一些键盘映射的字典,例如

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)

现在,该函数对于前两个字典条目效果很好。对于第三个条目,如果 widget.last_line 发生更改,它将不起作用。 python 编译器似乎将此条目作为常量值处理,即使它是小部件的属性。有没有办法让这样的条目保持“ volatile ”,或者有没有更好的方法来执行这样的操作?

最佳答案

无法按照您想要的方式存储对属性的引用。不过,您可以做的是编写一个新函数,在调用该函数时获取该属性,然后将当时的值传递给 move_to_line:

KEY_END  : (lambda: move_to_line(widget.last_line), None)

关于python - 将函数映射和参数存储在字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256016/

相关文章:

python - pymodbus:请求创建和响应接收

python - ncurses 和白底黑字

python - 为文件夹中的文件生成字典元素列表

python - 将元组作为值附加到字典中的现有键

python - 如何在python中提取两个不同标签之间的html?

python - 跨多进程共享基于异步等待协程的复杂对象

python - 如何匹配两个字典索引而不考虑顺序

Python 诅咒破坏终端输出

python - ncurses 中的六角网格

python - 简单的 pythoncurses-application 在运行时使用 100% CPU。这是正常的吗?