在python中多次从外部文件调用变量

时间:2018-05-29 03:47:22

标签: python python-3.x python-import python-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)
   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 :(得分:3)

如果为变量分配随机值,则引用该变量不会使值发生变化,无论该值是如何获得的。

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)

答案 1 :(得分:1)

这不是import在python中的工作方式。导入后,modulesys.modules缓存为keyvalue对模块名称和模块对象。当您尝试再次导入相同的module时,只需返回已缓存的值即可。但sys.modules是可写的,删除the密钥会导致python检查模块并重新加载。

虽然Olivier的回答是解决这个问题的正确方法,但是为了理解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

建议您阅读The import systemThe module cache上的官方Python文档,以便全面了解。