Основы Python #7: пространство имен, область видимости

preview_player
Показать описание
Мои курсы:
Boosty:

Patreon:

Что такое пространство имен и что такое область видимости.
В чем разница. Зачем нужно

Серия уроков по основам Python
Рекомендации по теме
Комментарии
Автор

Олег объясняет как боженька. В связке с GPT чатом, который не устает отвечать на вопросы, это что-то не реальное. Огромная Вам благодарность за ваши труды.

databox
Автор

Спасибо Олег. У тебя преподавательский талант. Без пафоса и все грамотно с деталями.

fleer
Автор

Охрененные уроки чтобы пройтись по базе! Олегу Спасибо!

hlwn
Автор

Олег просто красавчик, все без спешки и подробно, продолжай в том же духе! А хейтеров бань.

aleksprimetv
Автор

4:59 - что такое пространство имен.
scope 9:09 - область видимости.

alexfish
Автор

Вот, как все оказывается ... Супер много узнала. Спасибо за урок

elenalevasheva
Автор

Ты настолько понятно объясняешь, что даже мой мопс всё понял ))

odsmplf
Автор

Отлично, сразу подписался и поставил лайк ))))

fsyncte
Автор

Олег, конечно, жарит, в 6 утра записывает видосы )

rafmio
Автор

Спасибо за видос
Вы объяснили в этом и уроке №6 то, что очень долго не мог понять и 2 преподавателя по каким-то причинам так и не смогли до меня донести нужную информацию. В процессе обучения Python перешёл на IDE PyCharm. В этой IDE постоянно получал ошибку-предупреждение "shadows name 'x' from outer scope" и никак не мог понять, что это и как от неё избавиться.
только сейчас всё это понял
понял ещё, что вовсе не обязательно аргументы функции должны совпадать с именами внешних переменных
Короче, респект!

JmDGriz
Автор

Добрый день, Олег! Спасибо за урок! Я как раз экспериментирую с областями видимости и обнаружил проблему, природу которой не могу понять
Имеется модуль Choice, содержащий ряд функций (функции перезаписывают Chosen_Case, для чего импортируют другие модули). В глобальной области видимости есть словарь Chosen_Case, на элементах которого построен интерфейс приложения и словарь ALL_N, содержащий названия модулей, к которым можно обратиться из модуля Choice. В сильно урезанном виде это выглядит примерно так:

Chosen_Case = {‘Text’:’Welcome!’}
ALL_N = {‘a’:’A’, ‘b’:’B’}

def extractor(self, *args):
from Choice import value as S
global Chosen_Case
Chosen_Case = S()
self.Case_Text.text = Chosen_Case['Text'] # выводит текст в соответствующую Label

for key, value in ALL_N.items():
btn_n = Button(text=key)


При запуске приложения цикл for благополучно создает кнопки с именами из словаря ALL_N, но при нажатии на такую кнопку возникает ошибка: в модуле Choice нет элемента value. Пробовал объявить global value и non-local value и даже прописывать value в качестве аргумента функции extractor. Увы, интерпретатор твердит, что такого элемента в модуле Choice нет. Я не понимаю, почему на этапе вызова функции value перестает быть ссылкой на значение в словаре ALL_N и становится самостоятельным именем, которое интерпретатор пытается найти в модуле Choice

oiwrggi
Автор

Один момент оказался непонятен.
12:57. Когда мы запускаем код все просто name в locals() и name получили одно и тоже значение "Pupkin". Так и должно быть
13:10. name получило значение из enctype "in a()" и... name в locals() получило тоже значение! Пространство имен шагнуло следом за name по области видимости?
13:50. Самое интересное. С name все понятно "Eroha". Но что же случилось с locals()? Оно передумало идти по пространству имен за name или ее сдерживает какой-то механизм? Или что-то еще? Почему словарь оказался пустой?
Автор обговаривает, что происходит с переменной и областью видимости, но не говорит об этом выборочном поведении пространства имен.
Момент с исключением вполне понятнен

hekNt
Автор

Я конечно новичок (не газ), но кажется что в Пайтона это удобно реализовано, и делает его хорошим средством программирования. Такое мощное средство. Круто.

picha_titan
Автор

4:35 думаю это не совсем удачный пример. Тут важнее другая причина, по которой переменная name не была изменена - потому что не была вызвана функция, соответственно не отработали операторы в теле функции, а при определении функции её тело не исполняется.

Gleb_Pastushenko
Автор

4:40 Ну и еще не поменялось потому, что [ даже если бы в функции было global name, то ] самого вызова функции не было.

DJ-lpjr
Автор

Ещё бы желательно было бы про служебное слово 'global' рассказать, ведь иногда нужно не только увидеть значение переменной глобального уровня, но и изменить его из функции.
За объяснение спасибо, помогло упорядочить знания по теме.

oizldei
Автор

А как вынести переменную из локальной видимости, из функции?

liferesearcher
Автор

Отсутствие фигурных скобок и жесткое регулирование отступов, конечно, сбивают с толку. Очено сложно после языков типа С++ и С#. Точек с запятой тоже нет, это мешает, как будто есть какая-то незавершенность, как будто что-то делал и недоделал, и бросил.
Но зато успокаивает хороший звук, грамотная речь и отличная подача материала.

strimexify
Автор

элементарно же... где задал переменную, там она и находится

vladvulcan
Автор

Может кто то подсказать, как в Visual studio Code так же быстро как Олег закомментировать сразу несколько строк?

iBarBQ