#43. Области видимости переменных. Ключевые слова global и nonlocal | Python для начинающих

preview_player
Показать описание
Что такое глобальные и локальные переменные. Как они определяются и ведут себя. Ключевые слова global и nonlocal для управления поведением локальных и глобальных переменных.

Рекомендации по теме
Комментарии
Автор

Видео трех человек посмотрел как изменить глобальную переменную, так и не понял, а после этого видео все стало на свои места.

scorpionevil
Автор

Если прошлые две темы дались с трудом, то тут было всё предельно ясно! Респект!!!

tbassir
Автор

Толковый урок. Много полезного. Спасибо большое!

vladimirastrelin
Автор

Удивительно что с первого раза поняла. Несколько последних лекций раза по три смотрела, чтобы разобраться :)

hibwgbr
Автор

коммент для активности. оч доходчивое объяснение, благодарююю )

pavelgod
Автор

Спасибо большое за ваше видео, было понятно от и до, но стоило мне спуститься в комментарии, как все стало в разы сложнее)

ToN
Автор

После просмотра видео сразу все стало ясно. +вайб

nikitabaskakov
Автор

Мне в понимании областей видимости помогли две функции locals() и globals().

fahrenheit
Автор

Оператор цикла for не создает новое пространство имен, переменная в for появляется в том же пространстве, в котором находится этот оператор. А вот переменная генератора списка не выходит за пределы этого генератора. Также и параметры lambda-функции локальны в пределах этой функции, их имена заслоняют собой имена одноименных переменных, которые снаружи этой функции.

olegkomlev
Автор

Правильно ли я понял, что nonlocal обращается к области видимости предыдущей внешней функции, но не затрагивает, при их наличии, остальные уровни вложенности?

uqevxft
Автор

интересно, почему на моих курсах по Пайтону за 1К долларов не могут доходчиво обьяснить так, как на вашем канале)))

lesyabelogurova
Автор

Уважаемый Автор. Вопрос. На 11.20 минуте вы говорите что если во внутренней области inner мы хотим работать с переменной outer. Для этого мы должны указать нонлокал и указать переменную которую хотим брать а именно x с oter. Для меня это выглядит так, есть мастерская это inner, и есть улица - это outer на которой лежит полено это x. Вы говорите брать переменную из oter. Тоесть с ваших слов если я хочу работать с поленном я его иду и беру в мастерскую и работаю. Т.е я x=1 из outer беру в inner. Вот это так звучит. А на деле мы переменной inner меняем переменную outer. Т.е мы не берём с outer работать переменную а даём outer переменную с inner. Т.е берём полено в мастерской, это х =2 и идём на улицу работать

А потом на 12.03 минуте вы говорите что в inner переменная х не будет создаваться а будет браться из внешней области outer. Как то все противоречиво. Может должно быть так переменная х из иннер с помощью нонлокал работает с переменной х из outer и меняет ее. Как и переменная x при глобал меняет глобальную переменную

lrex
Автор

Спасибо за урок. Переменная lst передается как ссылка на List или создается новый объект локальный, т.е. изменяя lst внутри функции, меняется ли внешний List, если он передан как переменная?

my_lst = [1, 2, 3]
def my_func(lst: List):
lst = [5]
my_func(my_lst)
print(my_lst)

rozavaganova
Автор

А почему на 9.27
Названия функций:
Inner()
Outer()
Стоят снизу а не вместо print
Или над print?
Спасибо за урок

ney-izxl
Автор

а есть ли способ обращаться к переменной из конкретной области видимости из нескольких вложенных?

hasbeenbefore
Автор

В последнем пример, мы из inner удалили nonlocal, значит определяем внутри inner новую переменную х? Если я хочу в inner переопределить голобальную х, что тогда делать?

annashchankina
Автор

Получается что с помощью global и nonlocal нельзя обратиться к переменной в основном блоке программы с переменной вложенной функции?

flgligz
Автор

Что бы вот не сделать было явное объявление переменных в питоне? Нет! Вот надо было выпендриться!

tioma
Автор

можете объяснить в чем тут разница:


Эта функция работает без объявления nonloclal

def f(x):
def df():
print(x)
return df

>>> f(3)
3



Эта же, без nonlocal, выдает ошибку о присваивание

def sum(n1, n2):
def do_sum():
n1+=n2
return n1
return do_sum

>>>sum(3, 4)
UnboundLocalError: local variable 'n1' referenced before assignment

nevergonnagiveyouupnevergo
Автор

Сергей, здравствуйте.
Вопрос, скорее философский, чем технический: какие аргументы необходимо явно передавать в функцию?
Во время обучения при разборе чужого кода часто сталкиваюсь с ситуацией, когда некоторые переменные передаются в функцию не как явные аргументы, а как переменные из глобального окружения. В примере ниже при объявлении функции добавления слоев для модели нейросети переменная droput_rate не передается как аргумент, но используется в теле функции. По моим представлениям в функцию необходимо передавать все используемые переменные как аргументы, но часто сталкиваюсь с такими примерами и: "как правильно?".


dropout_rate = 0.3

def apply_bn_and_dropout(x):
'''

apply_bn_and_dropout - функция добавления слоев Dropout и BatchNormalization
вход:
x - набор слоев, после которых необходимо добавить Dropout и BatchNormalization
dropout_rate - доля отключенных нейронов
выход:
x - набор слоев с добавленными Dropout и BatchNormalization
'''
x = Dropout(dropout_rate) (x) # к слою x добавляем Dropout
x = BatchNormalization() (x) # к слою x добавляем BatchNormalization
return x

znouuxx