Поток предварительной обработки изображений Keras преобразует изображения RGB в BGR

Определение свободной переменной: используется, но не глобально и не связано.

Например:

  1. x не является свободным в коде 1, поскольку это глобальная переменная.
  2. x не является свободным в bar() в коде 2, потому что это связанная переменная.
  3. x свободен в foo().

Python делает это различие из-за закрытия. Свободная переменная не определена в текущей среде, т.е. е. сбор локальных переменных, а также не является глобальной переменной! Поэтому он должен быть определен в другом месте. И это концепция закрытия. В коде 2 foo() закрывается на x, определенном в bar(). Python использует лексическую область. Это означает, что интерпретатор может определить область действия, просто просматривая код.

Например: x известен как переменная в foo(), потому что foo() заключен в bar(), а x связан в bar().

Глобальная область обрабатывается специально Python. Было бы возможно, чтобы глобальная область рассматривалась как самая внешняя область, но это не сделано из-за производительности (я думаю). Поэтому невозможно, что x является свободным и глобальным.

Освобождение

Жизнь не так проста. Существуют свободные глобальные переменные. Документы Python (модель исполнения) говорят:

Глобальный оператор имеет ту же область действия, что и операция привязки имени в том же блоке. Если ближайшая закрывающая область для свободной переменной содержит глобальный оператор, свободная переменная рассматривается как глобальная.

>>> x = 42
>>> def foo():
...   global x
...   def baz():
...     print(x)
...     print(locals())
...   baz()
... 
>>> foo()
42
{}

Я сам этого не знал. Мы все здесь, чтобы учиться.

0
задан William Smith 17 January 2019 в 13:19
поделиться