Находится ли глобальное имя «а» в том же пространстве имен, что и модуль? - PullRequest
0 голосов
/ 30 мая 2020
import math

a = 1

def my_func():
    print('don\'t downvote')

my_func()

Я считаю, что вызов функции my_fun c () находится в локальном пространстве имен, созданном для функции my_fun c () - готов к исправлению. Содержится ли имя a в том же глобальном пространстве имен, созданном для модуля math ?

1 Ответ

0 голосов
/ 30 мая 2020

Нет. Допустим, ваш файл называется foo.py. Когда ваш модуль импортируется, для foo создается новое глобальное пространство имен, которое содержит (среди прочего) три имени:

  1. math, что относится к модулю math.
  2. my_func, который относится к вашей функции
  3. a, который относится к 1

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

Модуль math имеет собственное глобальное пространство имен. («Глобальный» на самом деле не очень хороший термин; у каждого модуля есть свое собственное пространство имен на уровне модуля.)

Единственное «глобальное» пространство имен в Python - это встроенное пространство имен, доступное из все модули.

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