【发布时间】:2020-02-18 15:53:58
【问题描述】:
我知道您可以使用 global 关键字。但这不是……全球性的。这只是在此函数之外引用另一个变量的一种方式。如果您有一个要引用的变量,我想这没什么大不了的(尽管仍然很麻烦)。但是,如果您有很多变量要在函数中移动怎么办?我是否必须每次都在全局范围的每个函数中声明这 2 个或 3 个或 10 个变量?难道没有办法声明[1] 一个变量(在某个地方或以某种方式)以便真正成为全局变量吗?
理想情况下,我希望一个文件 main.py 包含我的主要代码,一个文件 common.py 包含我的所有全局变量(已声明/初始化 [1] ) 并使用from common import * 我将能够使用 common.py 中声明的每个变量。
如有重复,我深表歉意。我确实四处寻找,但似乎找不到任何东西。也许你可以用类来做到这一点(?),但我试图避免将它们用于这个特定的程序(但如果没有其他方法,我会接受它)
编辑:添加代码以显示两个文件不起作用的示例:
文件main.py
from common import *
def func1():
x=2
print('func1', x)
def func2():
print('fuc2',x)
print('a',x)
func1()
func2()
文件common.py
x=3
打印出来:
a 3
func1 2
fuc2 3
但它应该打印:
a 3
func1 2
fuc2 2
因为 func2 即使在 func1 之后调用(其中 x 被赋值)也将 x 视为 3。这意味着 fuc1 实际上并没有使用“全局”变量 x,而是使用不同于“全局”变量的局部变量 x .如果我错了,请纠正我
[1] 我知道在 python 中你并没有真正声明变量,你只是初始化它们,但你明白我的意思
【问题讨论】:
-
为什么不使用 json 或 yaml 文件呢?
-
您可以将所有“真正全局”变量收集在一个字典中,因此只需将其名称设为“真正全局”即可访问所有其他变量。
-
Ideally I would like to have one file main.py with my main code and one file common.py with all my global variables (declared/initialized[1]) and with a from common import * I would be able to use every variable declared in common.py.你试过这个吗?这按预期工作。有什么问题? -
@Carsten 请详细说明。
-
@Poojan 我做了,它不起作用。每次还是要使用全局关键字
标签: python variables module scope global