我正在尝试找出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
我乐于接受其他建议,以使此过程更加高效/简化。但我唯一的要求是,当前正在读取数据库的脚本务必不得更改。继续读取和分配数据库变量是一个基本要求。我不会给您带来任何细节,但是该脚本对于检查我们从数据库接收的数据并确保其格式正确使用是至关重要的,因为我们将从另一台计算机接收数据。
答案 0 :(得分:0)
邮件中包含您的答案。只需将global
语句移至任何变量的首次使用上方即可。
您必须在需要为这些名称中的任何一个分配新值的任何函数的顶部重复这些global
声明。
Juanpa Arrivillaga做得很好。要跨越模块边界共享,您将需要使用模块名称来确切指定它们在哪个模块中定义。global
语句实际上仅有助于在单个模块中的函数和初始化代码之间共享名称。
如果“ source1.py
”创建了模块级(“全局”)变量或函数name1
,而您想在“ source2.py
”中使用它,则必须import source1
文件中的source2.py
,然后将变量/函数称为“ source1.name1”。
在这一点上,我真的建议查看字典或某种类型的自定义类或namedtuple
对象。您可以使用全局变量解决此问题,但最终看起来就像一条狗用两条腿走路。令人印象深刻的不是因为狗做得很好,而是因为狗完全做到了。
我将使用对象,字典或named tuple来保存这些字段,以便将整个混乱作为参数传递给函数。全局变量变得混乱,尤其是在经常更新的代码中。这消除了所有这些global
语句。对象的类类型或命名元组的字段列表成为整个模块可以看到的单个定义点。