【发布时间】:2020-01-18 14:08:00
【问题描述】:
我制作了一个最小的pynput 程序,当按下left 和right 箭头键时会执行不同的操作。我想把它变成一个可以接受不同值作为参数的函数。
这是一个没有函数且没有参数的最小工作示例:
from pynput.keyboard import Key, Listener
def on_press(key):
print('{0} pressed'.format(key))
if key == Key.esc:
return False
with Listener(on_press=on_press) as listener:
listener.join()
它会打印你按下的键,并在你按下esc时退出。
这就是我想要实现的。请注意,它不起作用。只看逻辑。 当按下left 箭头时,我希望程序执行取决于给定参数的命令。右箭头反之亦然。
from pynput.keyboard import Key, Listener
def on_press(key, left, right):
if key == Key.left:
print("{}'s key was pressed.".format(left))
if key == Key.right:
print("{}'s key was pressed.".format(right))
if key == Key.esc:
return False
def activate(name1, name2):
with Listener(
on_press=on_press(key, left=name1, right=name2)) as listener:
listener.join()
# when pressed, the program should print what on_press() is given as argument
activate('Mark', 'John')
【问题讨论】:
-
甚至没有关闭。
-
怎么不是?将参数“传递”给一个实际上被其他代码调用的函数的方式是使其成为闭包(或绑定方法,特别是如果您有几个不同的函数希望“传递”相同的论点)。
-
我不明白这个问题/答案,它根本不包含任何解释。我没有什么可做的
-
公平地说,这个问题是在问一个更难的情况——你希望回调函数是有状态的。但基本思想是一样的:定义一个函数(使用
def或lambda)insideactivate并将其传递(一如既往地不调用它)给Listener。