对变量所做的更改未反映在控制台中

时间:2019-06-16 01:05:33

标签: python pycharm python-import

代码讲得更好:

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控制台运行。

1 个答案:

答案 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文件中。