Python pynput键盘侦听器函数变量传递

Python pynput键盘侦听器函数变量传递,python,pynput,Python,Pynput,我遇到了一个问题,将count变量传递给on_press函数,该函数使用pynput侦听器库为每次按键调用。我不明白为什么变量没有递增然后输出到屏幕上。它在第一次迭代时进行增量和输出,但在下一次迭代时不进行。我很困惑,请帮忙 from pynput.keyboard import Listener import string count = 0 def on_press(count): count += 1 print(count) with Listener(on_pr

我遇到了一个问题,将count变量传递给on_press函数,该函数使用pynput侦听器库为每次按键调用。我不明白为什么变量没有递增然后输出到屏幕上。它在第一次迭代时进行增量和输出,但在下一次迭代时不进行。我很困惑,请帮忙

from pynput.keyboard import Listener
import string

count = 0 

def on_press(count):
    count += 1
    print(count)

with Listener(on_press=on_press(count)) as listener:
    listener.join()

这里的问题围绕着可变范围的主题。按时在
内部引用的
count
变量是传递到函数中的
count
参数(不是函数外部定义的全局变量
count
)。Python中的整数通过复制传递给函数(而不是通过引用)。因此,在您的代码中发生的事情是,您正在制作一个全局变量
count
的副本,在按
时将其传递到
,然后在按
时只增加传入的
count
的本地副本,因此它将始终打印出1

如果希望每次调用on_press时计数都递增,则应直接递增全局计数变量,如下所示:

from pynput.keyboard import Listener
import string

count = 0 

def on_press():
    global count
    count += 1
    print(count)

with Listener(on_press=on_press()) as listener:
    listener.join()

使用这种在函数中声明全局计数并使其递增的方法,只打印1而不打印任何其他内容的操作与以前完全相同。我也试着去摆弄它,但似乎没有什么东西能让你的脚很舒服!!!