python - 创建全局变量的次数和次数

时间:2018-06-11 07:28:16

标签: python python-3.x global-variables

在我的应用程序中,我经常查询数据库以获取表中的列列表。查询显然在计算上和时间上都很昂贵。我想将此查询添加到配置文件中,以便我的应用程序中的其他模块可以引用配置文件,而无需每次都查询数据库。但是,我不想对列进行硬编码,以确保与未来可能没有相同列的数据库的交叉兼容性。

所以我的问题是:

如果我的配置文件中有table_columns = db.query()语句作为全局变量。每次导入配置文件时都会执行此语句吗?或者每次我引用变量?或者,当应用程序首次设置为运行时,是否会初始化所有模块中的所有全局变量,因此查询只会被调用一次?

2 个答案:

答案 0 :(得分:1)

您的代码按特定顺序执行。 Python是动态类型语言。因此,它以特定的顺序执行代码,例如。

假设您有两个模块:

main.py
settings.py

main.py中这是您的代码:

import settings


if __name__ == '__main__':
    b = 4
    print(settings.a)

settings.py中你有这样的代码:

a = 2

如果直接用settings.py调用python settings.py,则python会创建对象'a'变量。

如果用python main.py调用main.py,那么Python将首先import settings,因为这是执行模块中的第一行,首先创建变量'a',因为它导入{{1}模块进入它并运行其中的所有内容然后它返回main并创建变量settings然后它打印对象b的值(引用的变量名为'a'值2。)

我希望我的解释是正确的。如果没有,那么请纠正我。旁注:

当它创建对象时,它会存储其名称及其值,并且两者都存储在内存中的两个不同位置。然后,对象的名称将引用该对象的值。我认为值得记住它。

答案 1 :(得分:0)

溶液:

#db_utils.py 
table_column=None  
def init_columns():  
   global table_column  
   table_column=db.query()

在其他文件上

import db_utils
#call it one time dont forget to call it 
db_utils.init_columns()
#every time you want to access it without executing 
db_utils.table_column