Python真正的全局变量

问题描述 投票:-1回答:1

我知道您可以使用global关键字。但这不是……全球性的。这只是引用此函数之外的另一个变量的一种方法。如果您有一个要引用的变量,我想没什么大不了的(尽管仍然很麻烦)。但是,如果要在函数中移动很多变量,该怎么办?我是否必须在每个函数中每次都声明具有全局范围的2或3或10个变量?是否没有办法声明[1]某个变量(某个位置或某种方式)以使其真正成为全局变量?

理想情况下,我想要一个包含主代码的文件main.py和一个包含所有全局变量(已声明/初始化[1])和一个from common import *的文件common.py我将能够使用在[[common.py。

中声明的每个变量。

我很抱歉,如果重复的话。我确实在附近搜索,但似乎找不到任何东西。也许您可以使用classes(?)来做到这一点,但我试图避免在特定程序中使用它们(但是如果没有其他方法,我可以采用)


[1]

我知道在python中,您实际上并没有声明变量,您只是对其进行了初始化,但我明白了

python variables module scope global
1个回答
1
投票
从技术上讲,每个模块级变量都是全局变量,您可以在任何地方使用它们。您可能没有意识到的一个简单示例是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上比添加新属性更容易维护。到一个模块。

© www.soinside.com 2019 - 2024. All rights reserved.