gpt4 book ai didi

python - 来自不同文件 Python 的全局变量

转载 作者:IT老高 更新时间:2023-10-28 22:13:30 25 4
gpt4 key购买 nike

所以我有两个不同的文件,有点像这样:

file1.py

from file2 import *
foo = "bar"
test = SomeClass()

file2.py

class SomeClass :
def __init__ (self):
global foo
print foo

但是我似乎无法让 file2 识别来自 file1 的变量,即使它已经导入到 file1 中。如果能以某种方式做到这一点,那将是非常有帮助的。

最佳答案

file2 中导入 file1.py 使得绑定(bind)在 file2 中的全局(即模块级)名称可用于 file1 中的后续代码——唯一的这样的名称是 SomeClass 。它确实做相反的事情:当 file1 导入 o​​jit_code 时,file2 中定义的名称不可用于 file1 中的代码。即使您以正确的方式导入( file2 ,正如@nate 正确推荐的那样),而不是以您正在做的可怕,可怕的方式(如果阳光下的每个人都忘记了构造 import file2 的存在,生活也会如此)会所以对每个人都更好)。

显然您想让 from ... import * 中定义的全局名称可用于 file1 中的代码反之亦然。这被称为“循环依赖”并且是一个可怕的想法(在 Python 中,或者在其他任何地方)。

因此,与其向您展示在 Python 中实现(某种程度的)循环依赖的极其脆弱、通常无法维护的技巧,我更愿意讨论您可以避免 如此糟糕的结构。

例如,您可以将需要对两个模块都可用的全局名称放在 third 模块中(例如 file2 ,以继续您的命名连续;-)并将第三个模块导入到每个模块中另外两个( file3.pyimport file3file1 ,然后使用 file2 等,即 qualified 名称,用于从其他模块中的一个或两个访问或设置这些全局名称,< strong>不是裸名)。

当然,如果您确切地澄清(通过编辑您的 Q)为什么您认为您需要周期性依赖(只是一个简单的预测:无论是什么让您认为你需要一个循环依赖,你错了;-)。

关于python - 来自不同文件 Python 的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400525/

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