python - когда и сколько раз создаются глобальные переменные - PullRequest
0 голосов
/ 11 июня 2018

В моем приложении я часто запрашиваю базу данных, чтобы получить список столбцов в таблице.Запросы, очевидно, требуют вычислительных затрат и времени.Я хотел бы добавить этот запрос в файл конфигурации, чтобы другие модули из моего приложения могли ссылаться на файл конфигурации без необходимости каждый раз запрашивать базу данных.Однако я не хочу жестко кодировать столбцы для обеспечения кросс-совместимости с будущими базами данных, которые могут не иметь такие же столбцы.

Итак, мой вопрос:

Если у меня в файле конфигурации есть оператор table_columns = db.query() в качестве глобальной переменной.Будет ли этот оператор выполняться каждый раз, когда я импортирую файл конфигурации?Или каждый раз, когда я ссылаюсь на переменную?Или все глобальные переменные из всех модулей инициализируются, когда приложение впервые настроено на запуск, и поэтому запрос будет вызываться только один раз?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

решение:

#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
0 голосов
/ 11 июня 2018

Ваш код выполняется в определенном порядке.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'.

, если вы позвоните main.py с python main.py, тогда Python будет import settings первым, потому что это первая строка в исполняемом модуле, сначала создает переменную 'a', потому что он импортирует модуль settings, поэтому он входит в него и затем запускает все, что в немон возвращается к основному и создает переменную b, а затем печатает значение объекта 'a' (переменная с именем 'a' ссылается на значение 2).

Надеюсь, мое объяснение верное.Если нет, то, пожалуйста, поправьте меня.Примечание:

Когда он создает объект, он сохраняет его имя и его значение, и оба хранятся в двух разных местах в памяти.имя объекта затем ссылается на значение этого объекта.Я думаю, что стоит помнить об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...