将值传递给其他模块 Python
我有两个脚本,分别叫做 A.py 和 B.py。
我想知道怎么把 A.py 中的值传递给 B.py。
具体来说,当 A.py 脚本运行结束时,它会在最后调用 B.py。
我的问题是,我需要把一些值从 A.py 发送到 B.py。
有没有人能帮我,教我怎么把 A.py 的值传给 B.py,这样我就可以在 B.py 中使用这些值。
“我理解得对吗?你是想让 B.py 使用 A.py 结束时所有的变量和它们的值?”
这正是我想要的。我已经把我的 A.py 和 B.py 上传到 pastebin 网站。
http://elca.pastebin.com/m618fa852 <- A.py
http://elca.pastebin.com/m50e7d527 <- B.py
我想在 B.py 中使用 xx 这个值,而这个值是来自 A.py 的。
抱歉,我的英语不好。
3 个回答
你的问题可能问得有点抽象,我不太清楚你具体需要什么。
一般来说,当你在A中完成所有工作,准备好去做B的时候,你需要在模块的最上面写上import A
,然后调用A中的一个函数,把你想传递的所有值都放进去。如果B现在使用的是一些固定的全局变量,而你想要替换它们,就需要把它改成使用函数的方式。
你的问题不是很清楚。
import B
B.methodToExecute(argument)
我理解得对吗?你是想让 B.py 在 A.py 完成后,使用 A.py 中所有的变量和它们的值?
[编辑]
好的,问题是你不能轻易做到这一点,而不进行变量的赋值。你想实现的效果就像是反向导入。通常情况下,如果你在一个模块或脚本中导入另一个模块,导入者(在这个例子中是 A)可以访问被导入者(B)的变量、方法等,但反向是做不到的。
在 A.py 中:
a = 2
print "A.a:", a
import B
print "B.b:", B.b
from B import *
print "b in our namespace:", b
在 B.py 中:
b = 3
这将打印:
A.a: 2
B.b: 3
b in our namespace: 3
如果你百分之百确定你想这样做(为什么不创建一些相关的类和方法,或者把方法放在一个大模块里呢?),你可以从 B 模块导入 A 模块,所以如果你修改 B.py:
在 B.py 中:
b = 3
from A import *
print "a in B's namespace:", a
... 然后再运行一次,你会看到一些奇怪的输出,出现双行和你想要的 a in B's namespace: 2
这一行(所以算是成功了一半)。关键是,如果你导入的是没有函数和/或模块/类声明的简单脚本,每当 Python 导入某个东西时,必要的对象和引用会在 Python 虚拟机内部创建,并且被导入的脚本会被执行,这样你可能会遇到之前提到的循环导入问题。使用模块或类会更好,因为在这些情况下,只有在
if __name__ == "__main__":
...
之后的部分会在导入时执行。
或者,这个讨论中的另一个好主意是调用一个子进程,但那样你需要在命令行中检查变量,而不是直接在你的脚本命名空间中。