当前位置: 首页 > 面试题库 >

来自其他文件Python的全局变量

翟俊哲
2023-03-14
问题内容

因此,我有两个不同的文件,如下所示:

file1.py

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

file2.py

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

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


问题答案:

导入file2file1.py使得全球(即,模块级)的约束名字file2提供给下面的代码file1-唯一的此类名称是SomeClass。它并
没有 做反向:在定义的名称file1并不提供给代码file2的时候file1进口file2。即使您以正确的方式(import file2如@nate正确建议)导入的情况也是如此,而不是以令人恐惧的可怕方式进行操作(如果在阳光下的每个人都忘记了结构的存在from ... import *,生命将会是 所以 更好的为大家)。

显然,你想在定义的全局名称file1提供给代码file2 反之亦然。这被称为“循环依赖”,这是一个 糟糕的
主意(在Python或其他任何地方)。

因此,与其向您展示在Python中实现周期性依赖(有些类似)的令人难以置信的脆弱,通常难以维护的黑客,我不如讨论 可以避免
这种可怕结构的许多出色方法。

例如,您可以将需要两个模块都可用的全局名称放在 第三个
模块中(例如file3.py,继续命名;;),然后将该第三个模块导入到其他两个模块中的每个模块中(import file3file1和中file2,然后使用)file3.foo(例如, 合格
名称),目的是访问或设置来自其他模块之一或两者的全局名称, 而不是 裸名)。

当然,如果您(通过编辑Q)明确 说明了为什么
您认为需要周期性依赖(只是一个简单的预测:不管是什么使您认为您需要周期性依赖,那么您都会得到越来越多的具体帮助)。错误;-)。



 类似资料:
  • 问题内容: 我有2个守护程序,它们应该访问相同的变量。我为全局变量创建了第3个文件,每个守护程序都可以访问该变量。但是,当一个更改变量时,另一个仍然看到默认值。 例: glob.py 守护程序a: 守护程序b: 每次我希望我将问题弄清楚时,它将打印0,并且有人可以帮助我。如果您需要更多信息,请随时询问。 问题答案: 看起来(尽管您没有明确告诉您)您正在以一种完全独立的方式运行程序:Python解释

  • 问题内容: 此代码为何起作用: 但这给出了“分配前引用的局部变量’var’”错误: 问题答案: 因为在第一个代码中,您已经创建了一个局部变量并使用了它的值,而在第二个代码中,您正在使用局部变量,而没有对其进行定义。 因此,如果要使第二个功能正常工作,则需要声明:- 在使用该功能之前。 而在此代码中: 更新 :- 但是,按照@Tim的注释,您不应在函数内部使用变量。最好在使用变量之前先定义变量,然后

  • 本文向大家介绍python跨文件使用全局变量的实现,包括了python跨文件使用全局变量的实现的使用技巧和注意事项,需要的朋友参考一下 Python 定义了全局变量的特性,使用global 关键字修饰 但是他的一大缺陷就是只能本module 中也就是本文件中使用,跳出这个module就不行。 try 1: 使用一个更宏观的思路,全局变量就用全局加载的模块解决,很遗憾也是不行, file_1: fi

  • 问题内容: 我对全局变量的工作方式感到困惑。我有一个大型项目,大约有50个文件,并且需要为所有这些文件定义全局变量。 我所做的就是在我的项目main.py文件中定义它们,如下所示: 我尝试过的另一种方法,但也没有用 在subfile.py我里面有这个: 但是同样,它没有用。我应该如何实施呢?我知道当两个文件彼此之间并不真正了解时(子文件不知道主文件),它就不能那样工作,但是如果不使用io编写或pi

  • 问题内容: 在GOLANG中,是否有办法使变量的作用域在包中的文件本地?就我而言,有2个文件ex1.go和ex02.go。ex01.go定义了一个全局变量 在该文件中的所有功能之间使用。 在另一个文件ex02.go中(除了ex01.go和ex02.go属于同一类问题(即并发性),它与ex01.go无关),我无法为waitGroup定义一个变量,如下所示: 我收到一个错误-“在此块中重新声明了变量名

  • 问题内容: 我了解Python中局部变量和全局变量的概念,但是我只是有一个问题,为什么下面的代码中会出现错误?Python逐行执行代码,因此在读取第5行之前,它不知道a是局部变量。Python尝试执行第5行后,会回退一行并将其标记为错误吗? 问题答案: 设置和测试 为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题: 版画。因此,调用此函数不是问题,而是在下一个函数上: 我们收到一个错误