Разница между областями и пространствами имен в python?

Я новичок в python, пожалуйста, опишите разницу между областями и пространствами имен с примером.

заранее спасибо

  • Обрезано среднее с процентом в Python?
  • Позиционный аргумент против ключевого слова
  • Как выполнять операции, требующие OAuth, в работе GAE cron?
  • Процентный шанс сделать действие
  • Как получить список встроенных модулей в python?
  • Python strip () несколько символов?
  • Мне нужно освободить RAM, сохранив словарь Python на жестком диске, а не в ОЗУ. Является ли это возможным?
  • Python: как реализовать __getattr __ ()?
  • Использование двух библиотек Python с конфликтующими именами
  • Как написать и сохранить html-файл в python?
  • Получить доступные модули
  • Как изменить записи списка во время цикла?
  • One Solution collect form web for “Разница между областями и пространствами имен в python?”

    Области применения

    Вы можете представить себе «область» как набор имен, к которым у вас есть доступ, из определенной точки кода.

    x = 1 y = 2 def foo(): z = 3 + y # Here, I have access to `x, y, foo` -- They are in the current scope # `z` is not in the current scope. It is in the scope of `foo`. a = x + y b = x + z # NameError because `z` is not in my scope. 

    Обратите внимание, что в функции foo меня есть доступ к «охватывающей» области. Я могу читать любое имя, которое определено внутри функции, но также любое имя, которое определено в среде, где была создана моя функция.

    В примере, внутри функции foo , область содержимого содержит x , y , foo , z и a (она будет содержать b если b должен быть определен, а не throw NameError ).

      ______________________________ | | | Names in enclosing scope | | {x, y, foo, ...} | | | | -------------------- | | | function scope | | | | {z} | | | | (Also has access | | | | enclosing scope) | | | -------------------- | | | ------------------------------ 

    Пространства имен

    Пространство имен является связанной концепцией. Обычно это считается объектом, который содержит набор имен. Затем вы можете получить доступ к именам (и данным, которые они ссылаются), просмотрев членов объекта.

     foo.x = 1 foo.y = 2 foo.z = 3 

    Здесь foo – пространство имен. Полагаю, вы можете представить пространство имен как контейнер имен. Наиболее естественным элементом пространства имен в python является module хотя class , экземпляр класса, функция может быть пространством имен, поскольку вы можете прикрепить к ним произвольные имена / данные в большинстве случаев.

    Обратите внимание, что в python эти понятия немного смешаны, так как вы можете импортировать область модуля как пространство имен

     # foo.py x = 1 y = 1 # bar.py import foo print foo.x print foo.y 

    Обратите внимание, что глобальная область foo импортируется в глобальную область bar в качестве пространства имен foo в этом примере.

    Мы также можем импортировать глобальную область foo в глобальную область bar без пространства имен, если мы хотим (хотя эта практика обычно не приветствуется):

     # bar.py from foo import * print x print y 
    Python - лучший язык программирования в мире.