在文件中打印时增加python中的变量



大家好,我有一小段代码,当程序运行时,我会在一个文件中为我在键盘上按下的每一个键打分,每行一个。问题是,我希望每一行都有一个ID,显然,这个ID每次都是不同的,我认为更简单的方法是让这个ID成为一个int,在每次写操作后递增;但我就是不能让它工作,它总是打印相同的内部

# detect key press
def on_press(key, myint=0):
try:
f = open("logger.txt", "a")
upper = str(key.char).upper()
f.write('{' + '"KeyPressed"' + ':' + '"' + upper + '","_id":"' + str(myint) + '"},' 'n')
myint += 1
f.close()
...
with keyboard.Listener(
on_press=on_press) as listener:
listener.join()

在这种情况下,如果我运行程序并按:A S D输出为:

{"KeyPressed":"A","_id":"0"},
{"KeyPressed":"S","_id":"0"},
{"KeyPressed":"D","_id":"0"},

有可能实现我的目标吗?

问题是,每次调用on_press时,它都会获得myint的新副本,而不是使用更改的持久副本。

您可以通过一个简单的闭包来修复它,该闭包将状态保存在父函数中:

def get_on_press(myint=0):
def on_press(key):
nonlocal myint
print("on_press:  key: {}  myint: {}".format(key, myint))
myint += 1
return on_press
on_press = get_on_press()

然后可以正常调用on_press

>>> on_press("a")
on_press:  key: a  myint: 0
>>> on_press("b")
on_press:  key: b  myint: 1
>>> on_press("c")
on_press:  key: c  myint: 2
>>> 

相关内容

  • 没有找到相关文章

最新更新