我正在尝试从外部文件中调用变量。为此我写了这段代码,
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
?请帮忙。
答案 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中的工作方式。导入后,module
将sys.modules
缓存为key
,value
对模块名称和模块对象。当您尝试再次导入相同的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 system和The module cache上的官方Python文档,以便全面了解。