Вызов переменной из внешнего файла несколько раз в Python - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь вызвать переменную из внешнего файла.И для этого я написал этот код,

count = 1
while (count <= 3):
   # I want to iterate this line
   # rand_gen is the python file
   # A is the varialbe in rand_gen.py
   # Having this expression A = np.random.randint(1, 100)
   from rand_gen import A

   print('Random number is ' + str(A))
   count = count + 1

Но когда я запускаю свой код, он вызывает только переменную A один раз и печатает тот же результат.Смотрите вывод кода,

Random number is 48
Random number is 48
Random number is 48

Как я могу вызвать переменную A из файла rand_gen.py с обновленным значением, каждый раз, когда он входит в цикл?Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Это не так, как import работает в Python.После импорта module в кешируется в sys.modules как key, value пара имени модуля и объекта модуля.Когда вы снова попытаетесь импортировать тот же module, вы просто получите уже кэшированное значение.Но sys.modules доступен для записи, и удаление ключа the приведет к тому, что python проверит модуль и загрузит снова.

Хотя ответ Оливье является правильным подходом к этому, для вашего понимания import, вы можете попробовать это:

import sys       # Import sys module

count = 1
while (count <= 3):
   # I want to iterate this line
   # rand_gen is the python file
   # A is the varialbe in rand_gen.py
   # Having this expression A = np.random.randint(1, 100)
   if 'rand_gen' in sys.modules:   # Check if "rand_gen" is cached
       sys.modules.pop('my_rand')  # If yes, remove it
   from my_rand import A           # Import now

   print('Random number is ' + str(A))
   count = count + 1

Вывод

Random number is 6754
Random number is 963
Random number is 8825

Рекомендую прочитать официальные документы Python по Система импорта и Модуль кеша , для полного понимания.

0 голосов
/ 29 мая 2018

Если вы присваиваете случайное значение переменной, ссылка на эту переменную не приводит к изменению значения независимо от того, как было получено значение.

a = np.random.randint(1, 100)

a # 12
# Wait a little
a # still 12

Таким же образом, когда вы импортировали свой модуль,код модуля был выполнен, и значение было присвоено A.Если модуль не будет перезагружен с помощью importlib.reload или если вы снова не вызовете np.random.randint, у A нет причин изменять значение.

Возможно, вы захотите сделать A функцией, которая возвращаетслучайное значение в нужном диапазоне.

# In the rand_gen module
def A():
    return np.random.randint(1, 100)
...