python进阶(三)-装饰器

1.装饰器
1.1介绍
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
在这里插入图片描述
代码遵循开放封闭原则
封闭:对实现的功能代码块
开放:对扩展开发
1.2.装饰器的使用
在这里插入图片描述
1.本来f1指向的是 f1这个对象,然后 调用ww(f1)这个函数返回的是inner这个对象,f1被重新指向 inner这个对象,f1() 就是调用inner()这个方法,func()就是调用的f1()这个方法。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.3 装饰器带参数
其实这时候 test 指向了func_in
在这里插入图片描述

在这里插入图片描述
1.4 通用的装饰器
在这里插入图片描述
1.5 带参数的装饰器
先调用最外层的func_out()函数 然后指向 func ,然后再是 test1=func(test1),就和之前是一样的了。
在这里插入图片描述
1.6 作用域
LEGB 原则
locals -> enclosing function -> globals -> builtins
局部变量———闭包空间———全局变量———内建模块(dir(_ builtin _) )

Python 在启动的时候会自动为我们载⼊很多内建的函数、类,

例如 dict,list,type,print,这些都位于 builtin 模块中可以使用 dir(_ builtin _) 来查看。

a= 1        #    全局变量   globals
def func():
	a=2        #    闭包变量   enclosing
	def inner_fun():
		a= 3        #    局部变量    locals                                
		print("a=%d"%a)    
	return  inner_fun
ff=func()
ff()

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/88078281