这个问题在这里已经有答案了:
在文件之间使用全局变量(7个答案)
两年前关门了。
我试图在python中找出全局变量,虽然有许多论坛帖子和示例,但没有一个真正符合我的需要。问题是:我使用一个mysql数据库来接收11个不同的变量。这些变量用于控制目的,例如在特定时间和日期打开和关闭阀门。我需要这些变量是全局的,它们必须能够在许多其他文件中使用。目前,这些变量只存在于读取数据库并为变量赋值的文件中。
我的问题是:
当我从数据库导入变量时,我能简单地将它们分配给脚本中的全局变量吗?这样地:
cursor.execute ("select variable1,variable2,....variableN from transaction where TransactionNumber=(select MAX(TransactionNumber) from transaction)")
readfromdb= cursor.fetchone()
variable1,variable2,.....variableN=list(readfromdb)
global variable1,variable2...variableN.
然后将这个文件导入到我正在使用的其他文件中?
我尝试过使用此方法,但收到以下错误:
SyntaxError: name 'TransactionNumber' is assigned to before global declaration
我愿意接受其他建议,以使这一过程更加有效/精简。但我唯一的要求是当前读取数据库的脚本不能更改。它继续读取和分配数据库变量是一个基本要求。我不会让你厌烦的细节,但该脚本是至关重要的检查数据,我们从数据库接收,并确保它是正确的格式使用,因为我们将从另一台计算机接收数据。
1条答案
按热度按时间atmip9wb1#
留言里有你的答案。把枪移开
global
上面的语句首次使用了任何变量。你得重复一遍
global
在需要为这些名称中的任何一个指定新值的任何函数的顶部的声明。juanpa arrivillaga提出了一个非常好的观点。要跨模块边界共享,您需要使用模块名称来指定它们在哪个模块中定义。这个
global
语句实际上只帮助在单个模块中的函数和初始化代码之间共享名称。“如果”
source1.py
创建模块级(“全局”)变量或函数name1
,您想在“中使用它”source2.py
“,你必须import source1
在source2.py
文件,然后将变量/函数引用为“source1.name1”。在这一点上,我真的建议看字典或某种类型的自定义类或
namedtuple
对象。你可以用globals来解决这个问题,但它最终会看起来像一只用两条腿走路的狗。令人印象深刻不是因为狗做得好,而是因为狗做得很好。我会使用一个对象、字典或命名元组来保存这些字段,这样整个混乱就可以作为参数传递给函数。全局变量变得混乱,尤其是在频繁更新的代码中。这样就可以摆脱所有这些
global
声明。对象的类类型或命名元组的字段列表成为整个模块可以看到的单个定义点。