python函数作用域,闭包,装饰器】的更多相关文章

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等应用场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 严格来说,装饰器只是语法糖,装饰器是可调用的对象,可以像常规的可调用对象那样调用,特殊的地方是装饰器的参数是一…
目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引用了外层函数的局部变量(L),并且在外层函数中 return 内层函数时,这种关系就称之为闭包. 闭包的特点就是返回的内层函数还引用了外层函数的局部变量,所以要想正确的使用闭包,那么就要确保这个被内层函数引用的局部变量是不变的. EXAMPLE: In [71]: def count(): ...:…
之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3: return n else: return fib_direct(n - 1) + fib_direct(n - 2) 然后大致分析了一下fib_direct(5)的递归调用过程,如下图: 住:这里的f(2)调用f(1)仅代表基本操作的次数. 可以看到多次重复调用,因此效率十分低.进一步,可以算出递归算法…
闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1(): name = 'wk' def a2(): print(name) return a2 闭包函数的作用 非闭包函数:随着函数的结束临时空间关闭 def func1(s): n = 1 n += s print(n) func1(3) func1(3) #每次函数结束临时空间关闭 func1(…
装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper(f): #装饰器 def inner(): '''执行函数之前要做的''' print('葫芦娃葫芦娃,一根藤上七个娃.') ret = f() '''执行函数之后要做的''' print('风吹雨打都不怕,啦啦啦啦~') return ret return inner @wrapper #语法糖…
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用wrapper函数 # 当一个被装饰的对象同时叠加多个装饰器时 # 装饰器的加载顺序是:自下而上 # 装饰器内wrapper函数的执行顺序是:自上而下 ''' import time def timmer(func): #func=wrapper2的内存地址 def wrapper1(*args,…
嵌套: 在函数的内部定义函数闭包: 符合开放封闭原则:在不修改源代码与调用方式的情况下为函数添加新功能  # global 将局部变量变成全局变量 num = 100 def fn1(): global num num = 600 return num # nonlocal 将局部变量变成嵌套变量 def outer(): num = 888 def inner(): nonlocal num num = 666 inner() outer() # 装饰器 # 在不改变源代码的形势下 添加新功能…
没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2") def test3(): print("welcome test3") ,,,["test3","retest"] x = test1() #test1()表示执行,将执行结果(返回值)赋给变量x,会自动执行,并且由于test1 没有返回值…
一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input('>>: ').strip() if choice in dic: dic[choice]()…
阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 2 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input(…