Что вы называете элементами модуля? - PullRequest
1 голос
/ 22 ноября 2011

У меня есть этот код из Learn Python The Hard Way, и мне нужно его прокомментировать:

from sys import argv

Итак, я сделал: #imports argv из модуля sys

Я знаю, что такое argvделает, но у меня возникают проблемы с выяснением, как назвать этот элемент модуля sys?Переменная, метод, функция?Переменная аргумента?

Также, учитывая эту строку кода, означает ли это, что весь модуль sys импортирован в мою программу или только argv?

Ответы [ 3 ]

6 голосов
/ 22 ноября 2011

argv - это переменная в пространстве имен модуля sys.Это список.

Оператор

from sys import argv

заставляет Python анализировать весь модуль sys (при условии, что он еще не был проанализирован, в этом случае он равен * 1009).* not reloaded) и скопируйте переменную argv в пространство имен текущего модуля.

2 голосов
/ 22 ноября 2011

Я знаю, что делает argv, но мне трудно понять, как вызвать этот элемент модуля sys?

Я думаю, вы имеете в виду что , чтобы называть argv, а не как его называть. Это не вызывается. Вот как вы можете доказать это в python.

>>> import sys
>>> callable(sys.argv)
False

Теперь, как упоминалось выше, unutbu загружает модуль sys, предполагая, что он еще не загружен. Что это значит? Хорошо, когда вы импортируете модуль, он добавляется в словарь в sys с именем sys.modules.

>>> import sys
>>> print sys.modules.keys
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os']

Словарь sys.modules предотвращает перезагрузку модуля. Оператор импорта проверяет sys.modules, чтобы предотвратить перезагрузку модуля.

Если вы действительно увлечены модулем, взгляните на список sys.builtin_module_names.

Если вы взламываете скрипт и хотите немедленно внести изменения в интерпретатор, перезагрузите скрипт.

>>> reload(sys)
>>> help(reload)
Help on built-in function reload in module __builtin__:

reload(...)
    reload(module) -> module

    Reload the module.  The module must have been successfully imported before.

Итак, у вас есть больше, чем вы когда-либо хотели знать о модулях и атрибутах модулей: D.

1 голос
/ 22 ноября 2011

http://docs.python.org/tutorial/modules.html говорит о

определений из модуля можно импортировать в другие модули или в основной модуль

и далее ниже

Существует вариант оператора import, который импортирует имена из модуля непосредственно в таблицу символов импортирующего модуля.

В этом смысле argv - это имя, которое определено в sys.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...