def tea():
def do_local():
spam = "local"
def do_nonlocal():
nonlocal spam
spam = "Nonlocal"
def do_global():
global spam
spam = "Global"
spam = "test"
do_local()
print("What you know about rouling: ", spam)
do_nonlocal()
print("SDFDSFDSFDSF: ", spam)
do_global()
print("html izi i nedostoin oplati: ", spam)
tea()
Почему в 3-ем принте выводится Nonlocal?
Python
Python def функция
В функции tea в начале функции значение переменной spam устанавливается в "test". Затем вызывается функция do_local, которая определяет локальную переменную spam и устанавливает ее в значение "local". Однако эта локальная переменная видна только в функции do_local и никак не влияет на значение spam в функции tea.
Далее вызывается функция do_nonlocal. Эта функция объявляет переменную spam нелокальной, что означает, что она является переменной, определенной в объемлющей области видимости (в данном случае в функции tea). Затем функция do_nonlocal присваивает значение "Nonlocal" нелокальной переменной spam. Это присвоение влияет на значение spam в функции tea, поэтому при выполнении строки print("SDFDSFDSFDSF: ", spam) будет выведено значение "Nonlocal".
Наконец, вызывается функция do_global. Эта функция объявляет переменную spam глобальной, что означает, что она определена в глобальной (т.е. верхнеуровневой) области видимости. Затем функция do_global присваивает глобальной переменной spam значение "Global". Это присвоение не влияет на значение spam в функции tea, поскольку переменная spam в функции tea является нелокальной, а не глобальной. Поэтому при выполнении строки print("html izi i nedostoin oplati: ", spam) снова выводится значение "Nonlocal".
Далее вызывается функция do_nonlocal. Эта функция объявляет переменную spam нелокальной, что означает, что она является переменной, определенной в объемлющей области видимости (в данном случае в функции tea). Затем функция do_nonlocal присваивает значение "Nonlocal" нелокальной переменной spam. Это присвоение влияет на значение spam в функции tea, поэтому при выполнении строки print("SDFDSFDSFDSF: ", spam) будет выведено значение "Nonlocal".
Наконец, вызывается функция do_global. Эта функция объявляет переменную spam глобальной, что означает, что она определена в глобальной (т.е. верхнеуровневой) области видимости. Затем функция do_global присваивает глобальной переменной spam значение "Global". Это присвоение не влияет на значение spam в функции tea, поскольку переменная spam в функции tea является нелокальной, а не глобальной. Поэтому при выполнении строки print("html izi i nedostoin oplati: ", spam) снова выводится значение "Nonlocal".
Использование global означает, что spam - глобальная переменная, о которой tea знать не знает.
Внутри do_global ты создаёшь глобальную переменную spam и присваиваешь ей значение "Global". Тогда как существующая внутри tea локальная переменная spam никак при этом не меняется.
"Простой" язык Python - это большое поле, густо усыпанное граблями.
Внутри do_global ты создаёшь глобальную переменную spam и присваиваешь ей значение "Global". Тогда как существующая внутри tea локальная переменная spam никак при этом не меняется.
"Простой" язык Python - это большое поле, густо усыпанное граблями.
Похожие вопросы
- Python.Какой функцией можно вывести КОЛИЧЕСТВО четных элементов в массиве?
- В Python все функции вызываются с контекстом, не как inline (встроенные)?
- Python. Итерационная функция
- Python. Вложенные циклы. Решение без использования функций(def;len; и тд)
- Python. Решение без функции def, словарей и списков
- Как использовать переменную созданную в def во всей программе python
- арументы (изменяемых объектов) функций в 1с и Python
- Задача по python. Помогите решить через def (по возможности не использовать библиотеки) спасибо
- Когда делать функцию def через return, а когда нет
- Параметры функций python (я чайник)