Автор оригинала: Pankaj Kumar.
Чтобы стать лучшим программистом, одно из самых важных вещей, чтобы понять, это пространства имен Python и вариабельные области. Причина в том, что, когда вы создаете многоклассные и многофакторные программы, зная область применения переменных, которые вы определяете, может означать разницу между правильными выходами и получать здесь странные выходы.
Так что без какой-либо дальнейшей задержки давайте направимся в него.
Что такое пространство имен Python?
Пространство имен в Python – это сборник в основных ключевых слов и объектов, которые Python имеет в памяти. Это очень распространенная концепция в объектно-ориентированном программировании.
В Python пространство имен представляет собой пару ключ, реализуемую как словарь. В Python есть 4 пространства имен в Python:
- Встроенный
- Глобальный
- Заключать в себя
- Местный
Получение более глубокого понимания пространств имен …
Если вы разделяете слово пространство имен, есть два элемента – имя и пространство.
Каждое имя в пространстве по существу является объектом. Когда вы определяете больше переменных, классов или функций в программе Python, вы расширите пространство имен. Они продолжают добавлять в локальные или глобальные пространства имен Python в зависимости от объема определенного объекта.
Посмотрите на пример реализации двух пространств имен ниже:
Намеа и nameb Отказ Каждый объект в пространстве имен определяется с помощью VAR_Name, которое является именем объекта.
Таким образом, namea и nameb – это пространства имен, а var_name1, var_name2 и т. Д. – имена в пространстве имен.
nameA={ 'var_name1'=object1, 'var_name2'=object2, …} nameB={ 'var_name1'=object3, 'var_name2'=object5, 'var_name3'=object6, …}
Что такое вариабельная область в Python?
Как вы можете заметить, что оба пространства имен, определенные выше, имеют аналогичные имена, но поскольку они существуют в различных пространствах имен, переменные не сталкиваются друг с другом.
Эта разница состоит в том, какие призывы. Итак, как Python определяет, какова область объема переменной или объекта в программе? Давайте посмотрим на пример ниже:
name = 'Andy' # define name def printBob(): name = 'Bob' # define name in function print('printing from the def: ', name) # print from function # the main function print('printing from the main: ', name) # print from the main printBob() # call the function to print
Производимый выход будет
printing from the main: Andy printing from the def: Bob
Как вы можете видеть, как переменные, имеющие одно и то же имя, определены в разных областях:
- Во-первых, в глобальном масштабе, где вся программа может получить доступ к ней)
- Второй один определен в функции PrintBOB (), где только эта функция может получить доступ к значению переменной
Это также причина, по которой вы распечатаете переменную, не вызывая функции, значение по умолчанию будет определено в глобальном объеме.
def printBob(): var = 'print it' print('printing from the function: ', var) # this statement will run without errors # call the function to print the variable value printBob() # try to access the object from outside of its scope print('printing from the main: ', var) # this will produce error
Итак, вы увидите вывод, как приведенный ниже.
Как видите, второе оператор печати производит ошибку. Причина в том, что переменная по имени var определяется в рамках функции PrintBOB () в приведенном выше примере.
Поскольку нет доступных глобальной доступной переменной, второе оператор печати выдает ошибку.
Пример вложенных функций Python
Область объема переменных аналогична пространствам имен Python, где название внутри пространства имен живет в рамках пространства имен. Вызов его извне потребует доступа к объему.
var = 0 name = 'absicsa' def function_outer(): # global var ; no need to declare to call the value name = 'nabisco' def function_inner(): global var # need to declare global to modify the value name = 'outlet' var = 23 print('name :',name, ', var :', var) print('name :', name, ', var :', var) function_inner() print('name :', name, ', var :', var) function_outer()
Выход кода будет:
Здесь вы видите, что мы определили вложенные функции. Каждая функция имеет свой собственный объем. Внутренние функции не могут получить доступ к переменным из внешних областей. Но функции снаружи могут получить доступ к внутренним функциям.
Итак, function_outer ()
Функция может быть вызвана с объема основной функции во время function_inner () Функция может быть вызвана из function_outer () Область функции.
По сравнению, если вы определите переменные за пределами любой функции, они являются глобальными переменными и могут быть доступны всей программой. Если вы хотите получить доступ к переменным из внешних областей, вы можете использовать нелокальное ключевое слово, определенное в Python 3.x.
Срок службы пространства имен
Срок службы пространства имен отличается. Это потому, что сами переменные выделяются в память в разное время во время выполнения программы. Когда объем заканчивается, объекты, созданные в этой области, обычно удаляются.
Итак, вот и все о пространствах имен Python и вариабельные области. У меня есть гораздо более глубокое понимание спецификаций Python и пространства имен в этой статье. Если у вас есть какие-либо вопросы, не стесняйтесь комментировать ниже!
Ссылки: Официальная документация