Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2019, 09:57   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию Нелокальная область видимости.

Код:
def func_outer():
    x = 2
    print('x равно', x)
    
    def func_inner():
        nonlocal x
        x = 5
    func_inner()
    print('Локальное x сменилось на', x)
func_outer()

Когда мы находимся внутри func_inner, переменная x, определённая в пер-
вой строке func_outer находится ни в локальной области видимости (опреде-
ление переменной не входит в блок func_inner), ни в глобальной области ви-
димости (она также и не в основном блоке программы). Мы объявляем, что хо-
тим использовать именно эту переменную x, следующим образом: nonlocal
x.

Вопрос: Почему переменная х определённая в первой строке func_outer находится ни в локальной области видимости?. Ведь локальная область видимости это объявление переменной внутри функции.

Последний раз редактировалось bITA666; 12.06.2019 в 10:00.
bITA666 вне форума Ответить с цитированием
Старый 12.06.2019, 11:34   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Почему переменная х определённая в первой строке func_outer находится ни в локальной области видимости?
Цитата:
Сообщение от bITA666 Посмотреть сообщение
опреде-
ление переменной не входит в блок func_inner
Цитата:
Сообщение от bITA666 Посмотреть сообщение
Ведь локальная область видимости это объявление переменной внутри функции.
И у каждой функции она своя.
p51x вне форума Ответить с цитированием
Старый 12.06.2019, 12:51   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
опреде-
ление переменной не входит в блок func_inner
так мы же уже определили в функции func_inner, переменную и создали в ней тип области nonlocal. В функции func_outer тоже определили переменную. Так о каком определении идет речь?

Последний раз редактировалось bITA666; 12.06.2019 в 12:55.
bITA666 вне форума Ответить с цитированием
Старый 12.06.2019, 13:20   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
о каком определении
1) Функция func_outer создаёт локальную переменную в своей локальной области видимости.
2) Входим внутрь func_inner. У неё появляется своя, отдельная локальная область видимости, а локальная область функции func_outer, соответственно, скрывается.
3) Директива nonlocal предписывает не создавать локальную переменную (то есть в локальной области видимости func_inner), а взять готовую в локальной области повыше.

Что непонятно-то?
Black Fregat вне форума Ответить с цитированием
Старый 12.06.2019, 13:26   #5
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
1) Функция func_outer создаёт локальную переменную в своей локальной области видимости.
2) Входим внутрь func_inner. У неё появляется своя, отдельная локальная область видимости, а локальная область функции func_outer, соответственно, скрывается.
3) Директива nonlocal предписывает не создавать локальную переменную (то есть в локальной области видимости func_inner), а взять готовую в локальной области повыше.

Что непонятно-то?
Теперь понятно, мне было лишь не понятно почему функция func_outer с переменной находится не в локальной области видимости. Просто в книге написанно не так дословно как хотелось. Спасибо за конкретные ответы.

Последний раз редактировалось bITA666; 12.06.2019 в 13:31.
bITA666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз про область видимости. Dimka-novitsek Общие вопросы C/C++ 13 20.09.2013 23:26
Область видимости chertovich Общие вопросы Delphi 10 24.09.2011 03:21
область видимости классов sashonk JavaScript, Ajax 1 15.09.2010 11:19
область видимости Dimarik Общие вопросы .NET 5 21.02.2010 21:32
область видимости ? artem779 Общие вопросы Delphi 3 14.09.2007 09:34