Вычисляется ли значение атрибута из другого файла при его вызове?

#python

#python

Вопрос:

Я не был уверен, как сформулировать этот вопрос. Поэтому я прошу прощения за путаницу.

Я новичок в Python, поэтому позвольте мне объяснить вопрос: итак, из другого файла используется словарь с именем FEATURES . Это использование:

 if (feature_name, dataset_id) in FEATURES.keys():
  ...
  ...
  

В другом файле ФУНКЦИИ определяются следующим образом:

 FEATURES = populate_features()
  

Итак, мой вопрос: когда FEATURES.keys() используется в первом файле, будет ли сначала вызываться populate_features() для заполнения словаря? или ФУНКЦИИ будут пустым словарем, поскольку функция populate_features() не была вызвана?

Примечание: poplulate_features() заполняет словарь. Поэтому, если бы он не был вызван, ФУНКЦИИ были бы пустым словарем.

Комментарии:

1. Пока вы импортируете FEATURES из другого файла, вы можете ожидать populate_features , что он будет вызван

2. Я действительно не слишком бойкий. Почему вы спрашиваете StackOverflow, когда вы могли бы просто попробовать это самостоятельно и посмотреть, что произойдет?

3. Не используйте in FEATURES.keys() , просто in FEATURES .

Ответ №1:

Когда вы import загружаете файл, выполняется весь его код.

 foo = ["f", "o", "o"]

def foobar():
    print("foobar")
  

В приведенном выше примере foo переменная инициализируется, но foobar ничего не выводит, поскольку функция только что определена, но не вызывается.

Для вашего примера ваш FEATURES инициализируется import , так что задолго до того, как вы его используете.

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