Тёмный

Что такое global и nonlocal. Легкий способ получить UnboundLocalError 

Python Russian
Подписаться 16 тыс.
Просмотров 3,4 тыс.
50% 1

Как обещал в прошлом видео - рассмотрим ключевые слова global и nonlocal
Особенности:
1) если мы пытаемся изменить какую-то переменную внутри функции, интерпретатор автоматически считает ее локальной, слова global/nonlocal нужны как информация интерпретатору, что переменная не локальна
2) оба ключевых слова НЕ нужны, если вам нужно только читать переменную, используйте их только для изменения
3) оба слова позволяют сразу перейти к поиску в нужном пространстве имен, nonlocal сразу переходит к поиску во внешних функциях (в который вложена текущая), global сразу переходит к поиску в глобальном пространстве имен. То есть nonlocal сразу идет в букву E, а global в букву G в аббревиатуре LEGB
4) global позволяет создать в глобальном пространстве имен переменную, которой там не было. Nonlocal работает только с уже существующими переменными
5) Nonlocal НЕ ищет в глобальном, а global во вложенных скоупах! Они не взаимозаменяемы
6) Есть редкие случаи, когда использование global оправдано, но в большинстве случаев и просто как хорошая практика - не стоит использовать global и nonlocal. Стоит отдавать предпочтение независимым, "чистым" функциям.
Почитать:
Learning Python, Fifth Edition by Mark Lutz, глава 17
docs.python.org/3/faq/program...
docs.python.org/3/faq/program...
docs.python.org/3/reference/s...
docs.python.org/3/reference/s...
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm

Опубликовано:

 

6 июн 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 26   
@vladislavgrin7122
@vladislavgrin7122 2 года назад
Спасибо! Очень тщательно разбираете все возможные комбинации расположения переменных, приятно смотреть
@alexandrbelotsky6301
@alexandrbelotsky6301 2 года назад
Лучшее объяснение, спасибо , что использовал начальные функции для объяснения, а не загадочных с каких-то с самых последних уроков, которые не знаешь для чего используется.
@Miron_MipoX
@Miron_MipoX 11 месяцев назад
Как-то интуитивно все это было понятно. Но после просмотра все стало более явным)
@benben-fz2es
@benben-fz2es 3 месяца назад
Меня когда то учили, что если одно свойство нужно двум функциональным блокам, то эти функциональные блоки принадлежат одному логическому объекту. Читай - классу. А если это не один объект - то принципиально можно побросаться друг в друга параметрами. Это был ++, еще до джавы. Понятно, что если язык не имеет ооп, то такое не работает, но никто же не принуждает работать в ассемблере, где и гоуту вполне себе кашерно.
@user-nb2zf3lk7j
@user-nb2zf3lk7j 2 года назад
Спасибо вам огромное! Меня всё спрашивали: "Что такое global и nonlocal и в чём их разница?" и т.п. на cyberforum, я наконец-то смогу ответить!!!
@lilacbush4229
@lilacbush4229 Год назад
классный канал, подробно и без воды. Если кто читает комент, можете про коментировать правильно ли я понимаю, что видимость функции это в функциях, а в ооп аналогия со свойствами, чтобы изменить свойство, то применяешь класс метод и через cls ты можешь менять свойство класса, а не экземпляра
@donfedor007
@donfedor007 Год назад
Спасибо! Видео отличное!
@kochcubing
@kochcubing Год назад
Ушел просветленный ... Спасибо!
@y18kotov
@y18kotov Год назад
Нет изменений, нет проблем. Спасибо.
@barma1309
@barma1309 Год назад
Супер
@marinatsoy6779
@marinatsoy6779 7 месяцев назад
Золотой канал
@sinrew2073
@sinrew2073 3 года назад
спасибо
@user-ch2oe7lu1x
@user-ch2oe7lu1x 2 года назад
Классное видео, сам много раз видел проявление болезни глобализма). Ещё у меня вопрос: стоит ли использовать nonlocal в замыканиях? Просто часто видел их в замыканиях в чужом коде и сам я использую их в замыканиях.
@PythonRussian
@PythonRussian 2 года назад
против нонлокал в замыканиях ничего не имею по той простой причине, что эта переменная из внешней функции закрыта от внешнего мира, ее нельзя поменять извне не забравшись в кишки функции (а там уже сам себе редиска). То есть такое использование безопасно, в отличие от глобала, который открыт всем и каждому. Надеюсь понятно объяснил=)
@user-ch2oe7lu1x
@user-ch2oe7lu1x 2 года назад
@@PythonRussian Большое спасибо)
@coryphoenixxx8238
@coryphoenixxx8238 Год назад
Было бы неплохо тут рассказать, почему если переменная counter будет изменяемого типа, например list, то нет необходимости в nonlocal) Я вот не могу догнать)
@RuslanSkiraUkraine
@RuslanSkiraUkraine 2 года назад
Спасибо за урок и есть вопрос. 4:19 А почему тогда принт все же не напечатал counter? т.е. scope создается до того когда интерпретатор заходит в тело функции?. И оператор равно = имеет какой то приоритет? def z2():... z2.__code__.co_varnames ->>() def z2(): z = 12 z2.__code__.co_varnames ->>('z',) Значит во время компиляции в pyc ? создается скоуп , А потом когда интерпретатор проходится построчно то уже скоуп есть?
@PythonRussian
@PythonRussian 2 года назад
Руслан, ты хоть поясни про что говоришь - укажи тайминг в видео, где принт не печатает. Я же не могу пересмотреть весь видос и искать о чем ты говоришь.
@PythonRussian
@PythonRussian 2 года назад
да, понял о чем ты. Объект функции создается при интерпретации ее, еще до вызова и так как внутри интерпретатор встретил +=1 то есть изменение переменной, но не встретил нонлокал или глобал, то он считает что переменная должна быть локальной. И когда уже при вызове дело доходит до принта, то мы получаем ошибку, так как переменная объявлена до ее использования(внутри функции ее нет). Ты внимательный, молодец, надо было мне проще пример привести, без принта в начале.
@alexeykolodochkin5826
@alexeykolodochkin5826 2 года назад
global===злое зло)
@barma1309
@barma1309 Год назад
Это не баг, это фича
@remzilort8498
@remzilort8498 5 месяцев назад
В си это бы проканало. Глобал значит глобал. Везде видно
@x-user-agent
@x-user-agent Год назад
nonlocal по действию лучше бы назвать nonglobal 😆
@spikespiegel4282
@spikespiegel4282 Год назад
А зачем вообще ввели этот синтаксический сахар если его вообще не стоит применять в программах? И зачем global к константам??? Мы что изменяем их? Нет. Тогда зачем их использовать? Чтобы вывести их? Так они и так выводится без приказания интерпретатору искать исключительно в глобальной области видимости. Если кто-то ответит, буду очень рад!)
@PythonRussian
@PythonRussian Год назад
язык должен предоставлять все инструменты, а уж как ты их используешь -дело твое. Константы - не должны меняться, с глобал они напрямую не связаны, так как если мы не меняем, то и глобал не нужен. Это если верно понял вопрос
Далее
Sinfdosh xotin 7😂
01:01
Просмотров 1,8 млн
220 volts ⚡️
00:16
Просмотров 392 тыс.
Главная тайна IT, язык Smalltalk
18:50
Просмотров 3,4 тыс.
Замыкания (Closures) в Python
30:54
Просмотров 14 тыс.
Декоратор с параметрами
19:39
Просмотров 8 тыс.