Сообщения

Показаны сообщения с ярлыком "Область видимости"

Декораторы функций в Python

Для понимания декораторов нужно помнить что, функция в Python это объект и функция может быть определена в другой функции. Так же нужно понимания  Области видимости и замыкания в Python . Декоратор функций в общем виде это функция которая принимает функцию и возвращает функцию. Так же возможна реализация через класс и реализацию метода __call__ Главное свойство декораторов -то, что они выполняются сразу после определения декорируемой функции. registry = [] def register (func): print ( 'running register(%s)' % func) registry . append(func) return func @register def f1 (): print ( 'running f1()' ) def f2 (): print ( 'running f2()' ) f2 = register(f2) # эквивалентно @register def f3 (): print ( 'running f3()' ) def main (): print ( 'running main()' ) print ( 'registry -> ' , registry) f1() f2() f3() if __name__ == '__main__' : main() Функция regi...

Область видимости и замыкания в Python

Прежде чем переменной можно будет воспользоваться, ей необходимо присвоить значения. Область видимости переменной определяется местом, где ей было присвоено значение. Правило LEGB L ocal локальная область функции E nclosing область внешней функции G lobal глобальное пространство B uilt-in встроенном (модуль builtis) Если не указаны инструкции, то поиск переменных по пространствам имен происходит с низу верх local->enclosing->global->built-in x = 10 print ( 'Global x =' , x) def fun_enclosing (): print ( 'Enclosing x =' , x) def fun_local (): print ( 'Local x =' , x) fun_local() fun_enclosing() Global x = 10 Enclosing x = 10 Local x = 10 Любое присвоение переменной в функции создает новую локальную переменную x = 10 print ( 'Global x =' , x) def fun_enclosing (): x = 20 # создания новой переменной в пространстве имен fun_enclosing print ( 'Enclosing x =' , x) de...