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

Python 对变量所做的更改未反映在控制台中,python,pycharm,python-import,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)。但是,当我再

代码更能说明问题:

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

我不使用Pycharm。但我想我知道为什么

当您使用Python控制台运行时,它应该在后台从源文件导入*

在控制台中将
a
重新绑定到新对象时,func仍将使用源文件中的
a
,而不是控制台中的
a

您可以通过从源文件import*显式地
进行尝试,并执行其余操作来验证它。我自己在电脑上查过了

如果您想了解原因,您可以阅读,并确保您理解以下内容:

在代码块中使用名称时,将使用最近的封闭范围解析名称。代码块可见的所有这些作用域的集合称为块的环境

我在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.]


使用test.py文件中的代码。

最初,这是一个模块化设计的大型神经网络。经过3天的调试,我将其缩减为原来的版本。可能重复:@XaviMartínez不,我不更新函数。但是,是的,解决我的问题,我只需要再次定义相同的函数,它就可以工作了!但鉴于功能没有改变,为什么会这样呢。是(a)改变了。哇,你是个天才,你在不同的平台上重新生成了问题。那么,你是说Pycharm没有bug?我如何防止这种情况发生?这让我在实验神经网络时头疼。@AlexDeft是的,我认为Pycharm没有bug,你可以在Pycharm控制台中试试。这是Python的规则。@AlexDeft将变量传递给func,而不是使用全局变量,这是一个坏习惯,从其他地方导入时将无效。
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.]