Руководство по глобальным переменным
Переменная, доступ к которой можно получить из любого места в коде, называется глобальной. Ее можно определить вне блока. Другими словами, глобальная переменная, объявленная вне функции, будет доступна внутри нее.
С другой стороны, переменная, объявленная внутри определенного блока кода, будет видна только внутри этого же блока — она называется локальной.
Разберемся с этими понятиями на примере.
Пример локальных и глобальных переменных
def sum(): a = 10 # локальные переменные b = 20 c = a + b print("Сумма:", c) sum()Переменная объявлена внутри функции и может использоваться только в ней. Получить доступ к этой локальной функции в других нельзя.
Для решения этой проблемы используются глобальные переменные.
Теперь взгляните на этот пример с глобальными переменными:
a = 20 # определены вне функции b = 10 def sum(): c = a + b # Использование глобальных переменных print("Сумма:", c) def sub(): d = a - b # Использование глобальных переменных print("Разница:", d) sum() sub()Сумма: 30 Разница: 10
В этом коде были объявлены две глобальные переменные: a и b . Они используются внутри функций sum() и sub() . Обе возвращают результат при вызове.
Если определить локальную переменную с тем же именем, то приоритет будет у нее. Посмотрите, как в функции msg это реализовано.
def msg(): m = "Привет, как дела?" print(m) msg() m = "Отлично!" # глобальная переменная print(m)Привет, как дела? Отлично!
Здесь была объявлена локальная переменная с таким же именем, как и у глобальной. Сперва выводится значение локальной, а после этого — глобальной.
Ключевое слово global
Python предлагает ключевое слово global , которое используется для изменения значения глобальной переменной в функции. Оно нужно для изменения значения. Вот некоторые правила по работе с глобальными переменными.
Правила использования global
- Если значение определено на выходе функции, то оно автоматически станет глобальной переменной.
- Ключевое слово global используется для объявления глобальной переменной внутри функции.
- Нет необходимости использовать global для объявления глобальной переменной вне функции.
- Переменные, на которые есть ссылка внутри функции, неявно являются глобальными.
Пример без использования глобального ключевого слова.
c = 10 def mul(): c = c * 10 print(c) mul()line 5, in mul c = c * 10 UnboundLocalError: local variable 'c' referenced before assignment
Этот код вернул ошибку, потому что была предпринята попытка присвоить значение глобальной переменной. Изменять значение можно только с помощью ключевого слова global .
c = 10 def mul(): global c c = c * 10 print("Значение в функции:", c) mul() print("Значение вне функции:", c)Значение в функции: 100 Значение вне функции: 100
Здесь переменная c была объявлена в функции mul() с помощью ключевого слова global . Ее значение умножается на 10 и становится равным 100. В процессе работы программы можно увидеть, что изменение значения внутри функции отражается на глобальном значении переменной.
Глобальные переменные в модулях Python
Преимущество использования ключевого слова global — в возможности создавать глобальные переменные и передавать их между модулями. Например, можно создать name.py, который бы состоял из глобальных переменных. Если их изменить, то изменения повлияют на все места, где эти переменные встречаются.
1. Создаем файл name.py для хранения глобальных переменных:
Глобальные, локальные и нелокальные переменные в Python
В этом руководстве вы узнаете о глобальных, локальных и нелокальных переменных в Python и о том, где и как их использовать.
Глобальные переменные
В Python переменная, объявленная вне функции или в глобальной области видимости, называется глобальной переменной. К глобальной переменной можно получить доступ как внутри, так и вне функции.
Давайте посмотрим на примере, как в Python создается глобальная переменная.
Пример 1. Создаем глобальную переменную
x = "глобальная переменная" def foo(): print("x внутри функции:", x) foo() print("x вне функции:", x)
Вывод:
x внутри функции: глобальная переменная x вне функции: глобальная переменная
В приведенной выше программе мы создали глобальную переменную x и задали функцию foo() , которая выводит на экран значение x . В коде программы мы вызвали функцию foo() , которая напечатала значение x внутри функции. Как вы видите, оно совпадает со значением x вне функции.
А что если нужно изменить значение x внутри функции?
x = "глобальная переменная" def foo(): x = x * 2 print(x) foo()
Вывод:
UnboundLocalError: local variable 'x' referenced before assignment
Python выдает ошибку, потому что он обрабатывает x как локальную переменную, но x при этом не определена внутри функции foo() .
Чтобы исправить эту ошибку, нам понадобится ключевое слово global . О том, что это такое и как оно работает, подробнее можете почитать в статье «Ключевое слово global».
Локальные переменные
Переменная, объявленная внутри тела функции или в локальной области видимости, называется локальной переменной.
Пример 2. Доступ к локальной переменной вне области видимости
def foo(): y = "локальная переменная" foo() print(y)
Вывод:
NameError: name 'y' is not defined
Python выдает ошибку, потому что мы пытаемся получить доступ к локальной переменной y в глобальной области видимости. Так делать нельзя: локальная переменная y «существует» только внутри функции foo() .
Давайте рассмотрим пример, который демонстрирует, как в Python создаются локальные переменные.
Пример 3. Создаем локальную переменную
Мы создаем локальные переменные, когда, например, объявляем переменные внутри функции.
def foo(): y = "локальная переменная" print(y) foo()
Вывод:
локальная переменная
Теперь вернитесь к программе, в которой x была глобальной переменной, а нам нужно было изменить эту переменную внутри функции foo() .
Глобальные и локальные переменные
В этом разделе мы поговорим о том, как использовать глобальные и локальные переменные в одной программе.
Пример 4. Локальные и глобальные переменные в одной программе
x = "глобальная переменная" def foo(): global x y = "локальная переменная" x = x * 2 print(x) print(y) foo()
Вывод:
глобальная переменная глобальная переменная локальная переменная
В приведенном выше программе мы объявили глобальную переменную x и локальную переменную y внутри функции foo() . Затем мы использовали оператор умножения, чтобы изменить глобальную переменную x , и вывели на экран значения переменных x и y .
После вызова функции foo() значение x становится равным "глобальная переменная глобальная переменная" , потому что внутри функции строка "глобальная переменная" умножается на два. Затем функция foo() выводит на экран новое значение x и значение переменной y — "локальная переменная" .
Пример 5. Глобальная и локальная переменные с одинаковым именем
x = 5 def foo(): x = 10 print("локальная переменная x:", x) foo() print("глобальная переменная x:", x)
Вывод:
локальная переменная x: 10 глобальная переменная x: 5
В приведенной выше программе мы использовали одно и то же имя x как для глобальной переменной, так и для локальной переменной. Python выводит разные значения переменных x , потому что локальная переменная объявлена внутри функции `foo()`, а другая — вне ее, то есть в глобальной области видимости.
Когда мы печатаем переменную x внутри функции foo() , на экран выводится сообщение "локальная переменная x: 10" . Это называется локальной областью видимости переменной.
Когда мы печатаем переменную x за пределами foo() , на экран выводится сообщение "глобальная переменная x: 5" . Это называется глобальной областью видимости переменной.
Нелокальные переменные
Нелокальные переменные используются во вложенных функциях, локальная область видимости которых не определена. Это означает, что переменная может не находиться ни в локальной, ни в глобальной области.
Давайте на примере рассмотрим, как нелокальная переменная работает в Python.
Для этого нам понадобится ключевое слово nonlocal .
Пример 6. Создаем нелокальную переменную
def outer(): x = "локальная переменная" def inner(): nonlocal x x = "нелокальная переменная x" print("вложенная функция:", x) inner() print(":", x) outer()
Вывод:
вложенная функция: нелокальная переменная внешняя функция: нелокальная переменная
В приведенной выше программе есть вложенная функция inner() . Для создания нелокальной переменной мы используем ключевое слово nonlocal . Функция inner() определяется внутри функции outer() .
Примечание. Если мы изменим значение нелокальной переменной, изменится и значение локальной переменной.
СodeСhick.io - простой и эффективный способ изучения программирования.
2023 © ООО "Алгоритмы и практика"
Как в python задать глобальную переменную в функции не используя global
Я хочу задать глобальную переменную в функции. Это легко можно сделать с помощью global , но везде пишут, что из-за этого может возникнуть много проблем и вообще во многих случаях лучше не использовать global , считая каждый его вызов ошибкой в коде. Вот условный пример моего кода:
a = '' def func(): a = input() if not a: print('a is empty') else: print('a is not empty') func()
Этот код условно должен проверять a - это пустая переменная или нет. Как мне сделать, чтобы пустая строка a заменилась на то, что введет пользователь и запомнилась глобально?
Отслеживать
72.6k 105 105 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
задан 18 ноя 2021 в 20:44
21 2 2 бронзовых знака6 ответов 6
Сортировка: Сброс на вариант по умолчанию
Глобальные переменные плохи не от того, что они задаются описателем global . Они плохи потому, что неявное описание переменных усложняет логику программ, ее читаемость, отлаживаемость и предсказуемость результатов. Вы их или используете (и неважно как ) или нет. А если используете - то точно понимая все риски и точно понимая, зачем вы на них идете. И ответив (хотя-бы себе) на вопрос - а без них можно?
А если делать все "как положено" - то просто передаете переменную в функцию явно, а в функции выполняете свои проверки и модификации. Только и всего - просто и понятно.
Отслеживать
67.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
ответ дан 18 ноя 2021 в 20:57
11.6k 2 2 золотых знака 10 10 серебряных знаков 16 16 бронзовых знаковdef func(a): # a = input() if not a: print('\na is empty') a = f'a is empty --> ``' else: print('\na is not empty') a = f'a is not empty --> ``' return a a = '' a = func(a) print(f'1. a = ') a = 'Hello' a = func(a) print(f'2. a = ')
Отслеживать
ответ дан 18 ноя 2021 в 20:57
72.6k 105 105 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаковЛучше передать функции эту переменную, провести с ней какие-то действия, и вернуть результат функции через 'return', и переписать переменную.
Отслеживать
ответ дан 18 ноя 2021 в 20:56
405 2 2 серебряных знака 7 7 бронзовых знаков
Чем это отличается от уже данного ответа?
18 ноя 2021 в 21:43
Тем что он дан раньше
19 ноя 2021 в 7:46
Ой, сорри. Не заметил из очереди.
19 ноя 2021 в 7:52
Ничего страшного)
19 ноя 2021 в 8:09Вынеси переменную за блок функций
a = 1 b = 2 def ab(): print(a + b)
Отслеживать
ответ дан 19 ноя 2021 в 4:02
IPOleksenko IPOleksenko
82 9 9 бронзовых знаковНу это на самом деле и есть глобальные переменные. Просто пока вы их не модифицируете в функции, питон не требует использовать в ней ключевое слово global
19 ноя 2021 в 4:16
Помимо уже написанного про функции и передачу параметром, есть случаи, когда вам нужно, например, хранить некие параметры, к которым должен быть доступ сразу у многих ваших функций или классов. В этом случае, конечно, неудобно передавать эти параметры в явном виде в каждую функцию.
Вот в этом случае можно завести, например, специальный класс, который хранит эти параметры, а все ваши функции берут параметры из полей этого класса. А сам этот класс может загружать параметры из файла, например. Класс этот можно вынести в отдельный файл и импортировать этот файл когда нужны эти параметры.
Хотя по сути класс - это тоже в общем-то глобальная переменная, но класс - это лучше, чем переменная, переменные обычно называют абы как, а у класса скорее всего будет выделенное "говорящее" название и в одном классе будет собрано много параметров, а не так, что много глобальных переменных непонятно откуда взявшихся, ищи потом, откуда они, как и чего.
Ещё в случае, если вам нужно менять какие-то переменные в нескольких функциях, удобно вынести эти переменные в какой-то класс опять же, а функции сделать методами этого класса. Тогда эти функции-методы будут иметь прямой доступ к этим переменным-полям, при этом они не будут засорять этими переменными глобальное пространство имён и мешать другим функциям/классам. Чем и хороша собственно инкапсуляция - один из трёх принципов, на которых стоит ООП.
Python Глобальные переменные
Переменные, созданные вне функции (как и во всех приведенных выше примерах), называются глобальными переменными.
Глобальные переменные могут использоваться всеми, как внутри функций, так и снаружи.
Пример
Создайте переменную вне функции и используйте ее внутри функции
def myfunc():
 print("Python это " + x)Если вы создадите переменную с тем же именем внутри функции, эта переменная будет локальной и может использоваться только внутри функции. Глобальная переменная с тем же именем останется прежней, глобальной и с исходным значением.
Пример
Создайте переменную внутри функции с тем же именем, что и у глобальной переменной.
def myfunc():
x = "фантастика"
print("Python это " + x)print("Python это " + x)
Глобальное ключевое слово
Обычно, когда вы создаете переменную внутри функции, эта переменная является локальной и может использоваться только внутри этой функции.
Чтобы создать глобальную переменную внутри функции, вы можете использовать ключевое слово global .
Пример
Если вы используете ключевое слово global переменная принадлежит к глобальной области видимости:
def myfunc():
global x
x = "фантастика"print("Python это " + x)
Кроме того, используйте ключевое слово global если вы хотите изменить глобальную переменную внутри функции.
Пример
Чтобы изменить значение глобальной переменной внутри функции, обратитесь к переменной с помощью ключевого слова global :
def myfunc():
global x
x = "фантастика"print("Python это " + x)
Мы только что запустили
SchoolsW3 видеоВЫБОР ЦВЕТА
курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
ТОП Учебники
ТОП Справочники
ТОП Примеры
Получить сертификат
SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.