Понимание пространства имен в Python - PullRequest
0 голосов
/ 12 декабря 2011

Мне нужна помощь в понимании проблемы практического экзамена для класса CS в Python. Проблема касается пространства имен python. Вот вопрос:

Which of the following are true in Python?

i. Every function has access to the names in the builtin namespace.
ii. Every invocation of a function creates a new namespace nested within the calling function’s namespace.
iii. Invoking function G from function F adds the name G to F’s namespace
iv. The namespace of an imported module is always added to the builtin namespace.

a. i only
b. ii and iii only
c. i and iv only (answer)
d. i, ii and iii only
e. None of the above

Может кто-нибудь объяснить, почему второй и третий случаи являются ложными. Или укажите мне на некоторые ресурсы, которые объясняют пространство имен. Спасибо вам.

1 Ответ

1 голос
/ 12 декабря 2011

Для 2: пространство имен новой функции не входит в пространство имен вызывающей функции: оно полностью отделено.Внутренняя функция не имеет доступа к переменным, используемым во внешней.Вызов создает новое пространство имен, но оно не вложено в пространство вызывающей функции.

Я не знал 3, но это имеет смысл.Функция вызывается, и имя не добавляется в пространство имен, потому что это не нужно.Он не добавляется в пространство имен функции, потому что он уже находится в глобальном пространстве имен (или в определении класса), и обычно можно предположить, что функция имеет соответствующий доступ к нему по мере необходимости.И ссылка будет бесполезной, когда функция вернется, поэтому нет смысла добавлять ее в пространство имен.

Пространство имен - это вопрос того, кто что увидит.Таким образом, фрагмент кода знает только определения вещей в пространствах имен, к которым он имеет доступ.Функция имеет доступ к своему личному пространству имен (другие функции не видят этого) и глобальной области видимости / пространству имен (все могут видеть это).Думайте об этом как о файловых каталогах на вашем компьютере.У вас может быть два файла с одинаковыми именами, если они находятся в разных каталогах, а пространства имен удобны по большинству тех же причин, что и каталоги.Пространства имен помогают вам упорядочить ваш код и сделать его более модульным, вместо того, чтобы создавать чрезвычайно сложные зависимости между удаленными областями кода, и, как правило, избавляют вас от необходимости отслеживать все имена переменных в потенциально миллионах строк кода.

...