代码讲得更好:
import numpy as np
a = np.ones(shape=(4, 2))
def func():
for i in a:
print(i)
运行:
In[3]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In[4]: a = np.zeros(shape=(4, 2))
In[5]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
关于我已更改(a)的通知。但是,当我再次运行该功能时,没有任何变化!! 详细信息: Pycharm 的最新版本。配置>执行:使用Python控制台运行。
答案 0 :(得分:1)
我不使用Pycharm。但是我想我知道为什么。
使用Python控制台运行时,它应该在后台from your-source-file import *
。
在控制台中将a
重新绑定到新对象时,该功能仍将在源文件中使用the a
,而不是控制台中的the a
。
您可以尝试通过显式from your-source-file import *
进行尝试,并采取其他措施进行验证。我已经自己在计算机上检查了。
如果您想了解原因,则可以阅读4. Execution model: resolution-of-names — Python 3.7.3 documentation,并确保自己理解:
在代码块中使用名称时,将使用最接近的范围将其解析。代码块可见的所有此类范围的集合称为该块的环境。
我在ipython中的尝试:
In [2]: from test import *
In [3]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [4]: a = np.zeros(shape=(4, 2))
In [5]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [6]: def func():
...: for i in a:
...: print(i)
...:
In [7]: func()
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
和
In [1]: from auto_audit_backend.test_np import *
In [2]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [3]: a[0][0] = 666
In [4]: func()
[666. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [5]: a = np.zeros(shape=(4, 2))
In [6]: func()
[666. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
您的代码位于test.py文件中。