我有这种情况:
module1.py
:
class AudioEngine:
def __init__(self):
self.liverecording = False
def getaudiocallback(self):
def audiocallback(in_data, frame_count, time_info, status): # these 4 parameters are requested by pyaudio
data = None # normally here we process the audio data
if self.liverecording:
print("Recording...")
return data
return audiocallback
main.py
:
问题:如何使回调函数audiocallback(...)
根据a.liverecording
的新值进行相应的更改?如果开箱即用,那为什么呢?
更具体地说,一旦用f = a.getaudiocallback()
创建f
,在他的代码中是否保存一个指向a.liverecording
的指针(因此,如果修改后者,将考虑后者),还是在创建{a.liverecording
(即False
)值的副本?在
如果您理解闭包,这里唯一的技巧是在闭包中捕获的局部变量是
self
内的self
参数。在在该方法中,
self
当然是AudioEngine
实例a
。因此,您捕获的变量值就是同一个实例。在实际上,Python允许您在运行时反思几乎所有事情,因此您可以直接看到:
如果}将更新为指向新的值{}。因为它已经退出,所以永远不会发生这种情况;在调用方法时,单元格将始终指向
getaudiocallback
仍然有效,并且它将self
反弹到其他值,则{a
中的实例。在但是如果这个实例后来发生了变化,比如当您编写
a.liverecording = True
时,您当然可以看到这一点。在相关问题 更多 >
编程相关推荐