我知道您可以使用global
关键字。但这不是……全球性的。这只是引用此函数之外的另一个变量的一种方法。如果您有一个要引用的变量,我想没什么大不了的(尽管仍然很麻烦)。但是,如果要在函数中移动很多变量,该怎么办?我是否必须在每个函数中每次都声明具有全局范围的2或3或10个变量?是否没有办法声明[1]某个变量(某个位置或某种方式)以使其真正成为全局变量?
理想情况下,我想要一个包含主代码的文件main.py和一个包含所有全局变量(已声明/初始化[1])和一个from common import *
的文件common.py我将能够使用在[[common.py。
我很抱歉,如果重复的话。我确实在附近搜索,但似乎找不到任何东西。也许您可以使用classes(?)来做到这一点,但我试图避免在特定程序中使用它们(但是如果没有其他方法,我可以采用)
编辑:添加代码以显示两个文件不起作用的示例:文件
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中,您实际上并没有声明变量,您只是对其进行了初始化,但我明白了
sys
:import sys
myfile = open('path/to/file.txt', 'w')
sys.stdout = myfile
sys.stdout
是全局变量。程序各个部分中的许多内容(包括您无权直接访问的部分)都在使用它,并且您会注意到,在此处进行更改会改变整个程序的行为。如果在任何地方使用print()
,它将输出到您的文件中,而不是标准输出。您可以通过简单地制作整个项目都可以访问的
common
源文件来选择这种行为:common.py
var1 = 3 var2 = "Hello, World!"
sourcefile1.py
from . import common print(common.var2) # "Hello, World!" common.newVar = [3, 6, 8]
fldr/sourcefile2.py
from .. import common print(common.var2) # "Hello, World!" print(common.newVar) # [3, 6, 8]
如您所见,您甚至可以分配最初没有的新属性(common.newVar
)。但是,最好将
dict
放在common
中并存储各种全局值-将新键推到dict上比添加新属性更容易维护。到一个模块。
如果使用此方法,您将要警惕from .common import *
。由于名称空间,这使您无法更改全局变量-当您分配新值时,您仅在修改本地名称空间。通常,由于这个原因,您不应该执行
import *
,但这是其特殊的症状。