在文件中打印时python中的增量变量
大家好,我有一段简短的代码,当程序运行时,我在一个文件中按键盘上的每个键,每行一个。 问题是,我希望每一行都有一个ID,很明显,这个ID每次都是不同的,我认为更简单的方法是使这个ID成为一个int,在每次写操作后递增;但我就是不能让它工作,它总是打印相同的整数在文件中打印时python中的增量变量,python,Python,大家好,我有一段简短的代码,当程序运行时,我在一个文件中按键盘上的每个键,每行一个。 问题是,我希望每一行都有一个ID,很明显,这个ID每次都是不同的,我认为更简单的方法是使这个ID成为一个int,在每次写操作后递增;但我就是不能让它工作,它总是打印相同的整数 # detect key press def on_press(key, myint=0): try: f = open("logger.txt", "a")
# 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\u 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("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
>>>
问题是每次调用_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("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
>>>
myint不应该是函数范围之外的变量吗?您没有在函数中返回增量。myint不应该是函数范围之外的变量吗?您没有在函数中返回增量。有多种其他方法可以解决此问题。可以使用全局变量;或函数的属性;或者,您可以将函数转换为某个类的方法,然后使用class或instance属性。@KarlKnechtel是的,尽管我喜欢能够有多个实例和它们自己的独立计数器的想法。课堂解决方案也是一种很好的方法。解决这个问题还有很多其他的方法。可以使用全局变量;或函数的属性;或者,您可以将函数转换为某个类的方法,然后使用class或instance属性。@KarlKnechtel是的,尽管我喜欢能够有多个实例和它们自己的独立计数器的想法。类解决方案也是一种很好的方法。