Изменения, внесенные в переменную, не отображаются в консоли - PullRequest
0 голосов
/ 16 июня 2019

Код говорит лучше:

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

Обратите внимание, что я изменился (а). Но, когда я снова запускаю функцию, никаких изменений не происходит !! Детали: последняя версия Pycharm . Конфиги> Выполнение: запуск с консоли Python.

1 Ответ

1 голос
/ 16 июня 2019

Я не использую Pycharm.Но я думаю, что знаю почему.

Когда вы запускаете с консоли Python, он должен иметь from your-source-file import * в фоновом режиме.

Когда вы перепривязываете a к новому объекту в консоли, функция будетпо-прежнему используйте the a в вашем исходном файле, а не the a в консоли.

Вы можете явно попробовать from your-source-file import * и предпринять остальные действия, чтобы проверить это.Я сам проверил это на своем компьютере.

Если вы хотите понять, почему, вы можете прочитать 4.Модель выполнения: разрешение имен - документация Python 3.7.3 , и убедитесь, что вы понимаете это:

Когда имя используется в блоке кода, оно разрешается с использованием ближайшегообъем ограждения.Набор всех таких областей видимости для блока кода называется средой блока.

Моя попытка в 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.

...