首页 > 解决方案 > 将参数传递给包回调

问题描述

我正在使用Pynput包来监听键盘按键。它有一个按键回调方法,我这样定义:

def on_press(key):
    print('{0} key pressed'.format(key.char))
    ...
    if key == ord('q'):
        exit(0)
        return
    # view.update_ui(player.get_metadata()) # how can I pass this in?

然后它连接到监听器并启动监听器:

listener = keyboard.Listener(on_press=on_press)
listener.start()

如果唯一的参数key如 Pynput 文档中所示,这将非常有效。但是,我希望此函数采用其他参数,例如def on_press(key, view, player). 最pythonic的方法是什么?

标签: pythoncallback

解决方案


可能是工厂函数或functools.partial.

from functools import partial

def on_press(key, view, player):
    print('{0} key pressed'.format(key.char))
    ...
    if key == ord('q'):
        exit(0)
        return

listener = keyboard.Listener(on_press=partial(on_press, view=my_view, player=some_player))
listener.start()

推荐阅读