gpt4 book ai didi

python - 在 Python : How does it work? 中的模块之间传递数据的奇怪方式

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:41 25 4
gpt4 key购买 nike

我应该处理一些不是我自己写的困惑代码,在困惑中我发现了两个通过这种奇怪的方式通信的脚本(通过第三个中间人脚本):

message.py,“中间人”脚本:

class m():
pass

sender.py,谁想要发送一些信息给接收者:

from message import m

someCalculationResult = 1 + 2
m.result = someCalculationResult

receiver.py,想要打印sender.py产生的一些结果:

from message import m

mInstance = m()
print mInstance.result

而且,神奇的是,在解释器中,导入 sender.py 然后 receiver.py 确实打印 3...

现在,这里的幕后到底发生了什么?我们是否将结果存储到类定义本身并通过特定实例恢复它们?如果是这样,为什么我们不能从定义本身恢复结果呢?有没有更优雅的方式在解释器中连续运行的脚本之间传递内容?

使用 Python 2.6.6

最佳答案

这只是设置全局的一种复杂方式。

m 是一个类,m.result 是一个类属性。发送方和接收方都可以直接访问它,就像他们可以访问 m 一样。

他们也可以这样做:

# sender
import message
message.result = someCalculationResult

# receiver
import message
print message.result

这里的result只是message模块顶层模块中的一个名字。

应该注意的是,您正在做的是不是运行单独的脚本;您正在将模块导入同一个解释器。如果您首先运行 python sender.py,而没有导入 reciever.py,然后单独运行 python receiver.py 而没有导入 sender.py 这整个方案不起作用。

将数据从一段代码传递到另一段的方法有很多,这里无法一一列举,所有方法都适用于不同的场景和需求。例如,线程、单独的进程、单独的计算机都对消息传递的方式和应该发生的方式引入了不同的限制。

关于python - 在 Python : How does it work? 中的模块之间传递数据的奇怪方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com