2014-10-11 5 views
2

я не смотрел, что я ранее написал на линии, так что я случайно объявил переменную в IPython как:питон добавления переменных импортируемых модулей

np.zerosn=10 

Удивительно это было разрешено. Поэтому я подумал, что, возможно, это потому, что вы можете назвать периоды использования в именах переменных, но это не так. Поэтому мне интересно, что на самом деле происходит. Это добавление новой переменной в модуль numpy?

ответ

4

Да.

В общем, (большинство/много) объектов python имеют динамические пространства атрибутов, и вы можете вставлять все, что захотите, в любое время, когда захотите. А модули - это просто объекты. Их пространство атрибутов по существу совпадает с их глобальным охватом.

Чистые функции python - еще один (возможно, удивительный) пример того, на что вы можете вставить произвольные атрибуты, хотя они не связаны с локальной областью функции.

Большинство «встроенных» типов (т. Е. Те, которые реализованы в модулях расширения, а не те, которые находятся в модуле __builtins__) и их экземпляры, не имеют динамических пространств атрибутов. Также нет чистых типов python с __slots__.

+1

FWIW Я разместил несколько примеров (ab) с использованием атрибутов функции [здесь] (http://stackoverflow.com/questions/26096328/list-comprehension-example-with-different-statements/26102444#26102444). –

Смежные вопросы