我正在使用Python3。并且想知道附加到pypubsub Sendmessage命令的消息数据是通过引用还是通过值发送的?它似乎是通过引用发送的,但我想知道是否有人可以验证这一点
文档中还提到“消息不变性:侦听器必须保持消息内容不变,但PyPubSub没有对此进行验证”
下面的代码示例表明正在发送对消息数据参数的引用,并且修改这些数据会修改原始数据(而不是传递的数据副本)。是否有理由认为修改侦听器例程中的消息数据是个坏主意
from pubsub import pub
class widget():
def __init__(self):
self.thingy = [{'biz':0},{'baz':1},{'buz':2}]
pub.subscribe(self.listen_for, 'wodget')
def listen_for(self, arg1):
print('wodget heard')
print(self.thingy)
print(arg1)
def send_thingy(self):
arg1 = self.thingy
pub.sendMessage('widget',arg1=arg1)
class wodget():
def __init__(self):
self.thongy = None
pub.subscribe(self.listen_for, 'widget')
# listen calendar
def listen_for(self, arg1):
print('widget heard')
print(arg1)
self.thongy = arg1
self.thongy[1]['baz']=99
print(arg1)
print(self.thongy)
arg1 = self.thongy
pub.sendMessage('wodget',arg1=arg1)
if __name__ == "__main__":
aWidget = widget()
aWidget.send_thingy()
aWodget = wodget()
aWidget.send_thingy()
一个简单的脚本似乎表明,使用pypubsub回调修改对象的行为与正常的python行为是一致的,这对我来说是有意义的,因为pypubsub只是函数回调。见下文
另请参见:How do I pass a variable by reference?了解关于不变性的讨论
输出:
相关问题 更多 >
编程相关推荐