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

  Рет қаралды 3,898

Python Russian

Python Russian

Күн бұрын

Пікірлер: 29
@vladislavgrin7122
@vladislavgrin7122 2 жыл бұрын
Спасибо! Очень тщательно разбираете все возможные комбинации расположения переменных, приятно смотреть
@alexandrbelotsky6301
@alexandrbelotsky6301 2 жыл бұрын
Лучшее объяснение, спасибо , что использовал начальные функции для объяснения, а не загадочных с каких-то с самых последних уроков, которые не знаешь для чего используется.
@Miron_Nicolaevich
@Miron_Nicolaevich Жыл бұрын
Как-то интуитивно все это было понятно. Но после просмотра все стало более явным)
@lilacbush4229
@lilacbush4229 Жыл бұрын
классный канал, подробно и без воды. Если кто читает комент, можете про коментировать правильно ли я понимаю, что видимость функции это в функциях, а в ооп аналогия со свойствами, чтобы изменить свойство, то применяешь класс метод и через cls ты можешь менять свойство класса, а не экземпляра
@benben-fz2es
@benben-fz2es 8 ай бұрын
Меня когда то учили, что если одно свойство нужно двум функциональным блокам, то эти функциональные блоки принадлежат одному логическому объекту. Читай - классу. А если это не один объект - то принципиально можно побросаться друг в друга параметрами. Это был ++, еще до джавы. Понятно, что если язык не имеет ооп, то такое не работает, но никто же не принуждает работать в ассемблере, где и гоуту вполне себе кашерно.
@МаксимЕвтишкин-н5с
@МаксимЕвтишкин-н5с 3 жыл бұрын
Спасибо вам огромное! Меня всё спрашивали: "Что такое global и nonlocal и в чём их разница?" и т.п. на cyberforum, я наконец-то смогу ответить!!!
@Quimorax
@Quimorax 3 жыл бұрын
Классное видео, сам много раз видел проявление болезни глобализма). Ещё у меня вопрос: стоит ли использовать nonlocal в замыканиях? Просто часто видел их в замыканиях в чужом коде и сам я использую их в замыканиях.
@PythonRussian
@PythonRussian 3 жыл бұрын
против нонлокал в замыканиях ничего не имею по той простой причине, что эта переменная из внешней функции закрыта от внешнего мира, ее нельзя поменять извне не забравшись в кишки функции (а там уже сам себе редиска). То есть такое использование безопасно, в отличие от глобала, который открыт всем и каждому. Надеюсь понятно объяснил=)
@Quimorax
@Quimorax 3 жыл бұрын
@@PythonRussian Большое спасибо)
@ЛешаМакентоша
@ЛешаМакентоша 27 күн бұрын
А что мы считаем изменением переменной? Любое действие кроме вывода ее значения? Или только если id объекта меняется? Например в видео про замыкания получилось без глобалов и нонлокалов сделать append списка из внешнего скоупа, но ведь это изменение?
@PythonRussian
@PythonRussian 26 күн бұрын
изменение ид объекта, аппенд меняет содержимое списка, но переменная ссылается на тот же объект, потому проблем не возникает
@kochcubing
@kochcubing 2 жыл бұрын
Ушел просветленный ... Спасибо!
@coryphoenixxx8238
@coryphoenixxx8238 Жыл бұрын
Было бы неплохо тут рассказать, почему если переменная counter будет изменяемого типа, например list, то нет необходимости в nonlocal) Я вот не могу догнать)
@y18kotov
@y18kotov 2 жыл бұрын
Нет изменений, нет проблем. Спасибо.
@RuslanSkiraUkraine
@RuslanSkiraUkraine 3 жыл бұрын
Спасибо за урок и есть вопрос. 4:19 А почему тогда принт все же не напечатал counter? т.е. scope создается до того когда интерпретатор заходит в тело функции?. И оператор равно = имеет какой то приоритет? def z2():... z2.__code__.co_varnames ->>() def z2(): z = 12 z2.__code__.co_varnames ->>('z',) Значит во время компиляции в pyc ? создается скоуп , А потом когда интерпретатор проходится построчно то уже скоуп есть?
@PythonRussian
@PythonRussian 3 жыл бұрын
Руслан, ты хоть поясни про что говоришь - укажи тайминг в видео, где принт не печатает. Я же не могу пересмотреть весь видос и искать о чем ты говоришь.
@PythonRussian
@PythonRussian 3 жыл бұрын
да, понял о чем ты. Объект функции создается при интерпретации ее, еще до вызова и так как внутри интерпретатор встретил +=1 то есть изменение переменной, но не встретил нонлокал или глобал, то он считает что переменная должна быть локальной. И когда уже при вызове дело доходит до принта, то мы получаем ошибку, так как переменная объявлена до ее использования(внутри функции ее нет). Ты внимательный, молодец, надо было мне проще пример привести, без принта в начале.
@donfedor007
@donfedor007 2 жыл бұрын
Спасибо! Видео отличное!
@kodalbdva4078
@kodalbdva4078 4 ай бұрын
спасибо человечище
@marinatsoy6779
@marinatsoy6779 Жыл бұрын
Золотой канал
@sinrew2073
@sinrew2073 3 жыл бұрын
спасибо
@barma1309
@barma1309 2 жыл бұрын
Супер
@alexeykolodochkin5826
@alexeykolodochkin5826 3 жыл бұрын
global===злое зло)
@barma1309
@barma1309 2 жыл бұрын
Это не баг, это фича
@spikespiegel4282
@spikespiegel4282 2 жыл бұрын
А зачем вообще ввели этот синтаксический сахар если его вообще не стоит применять в программах? И зачем global к константам??? Мы что изменяем их? Нет. Тогда зачем их использовать? Чтобы вывести их? Так они и так выводится без приказания интерпретатору искать исключительно в глобальной области видимости. Если кто-то ответит, буду очень рад!)
@PythonRussian
@PythonRussian 2 жыл бұрын
язык должен предоставлять все инструменты, а уж как ты их используешь -дело твое. Константы - не должны меняться, с глобал они напрямую не связаны, так как если мы не меняем, то и глобал не нужен. Это если верно понял вопрос
@remzilort8498
@remzilort8498 10 ай бұрын
В си это бы проканало. Глобал значит глобал. Везде видно
@x-user-agent
@x-user-agent 2 жыл бұрын
nonlocal по действию лучше бы назвать nonglobal 😆
Основное оружие питониста: Listcomps и Genexp
52:55
Sigma Kid Mistake #funny #sigma
00:17
CRAZY GREAPA
Рет қаралды 7 МЛН
When Cucumbers Meet PVC Pipe The Results Are Wild! 🤭
00:44
Crafty Buddy
Рет қаралды 61 МЛН
كم بصير عمركم عام ٢٠٢٥😍 #shorts #hasanandnour
00:27
hasan and nour shorts
Рет қаралды 11 МЛН
Why no RONALDO?! 🤔⚽️
00:28
Celine Dept
Рет қаралды 93 МЛН
LEGB-rule. Как Python ищет имена переменных
12:37
ХНУРЕ. Java. Функціональний інтерфейс
1:33:29
Игорь Бибичков
Рет қаралды 20
Первые шаги в ООП: класс, объект, self
1:00:45
Python Russian
Рет қаралды 35 М.
Multiprocessing: используем все ядра
27:50
Python Russian
Рет қаралды 3,9 М.
PYTHON МАГИЧЕСКИЕ МЕТОДЫ: __CALL__
21:34
luchanos
Рет қаралды 2,6 М.
Замыкания (Closures) в Python
30:54
Python Russian
Рет қаралды 16 М.
Sigma Kid Mistake #funny #sigma
00:17
CRAZY GREAPA
Рет қаралды 7 МЛН