Python的闭包和装饰器你真的了解吗

Python的闭包和装饰器你真的了解吗

目录

闭包

装饰器

总结

闭包

闭包就是能够读取其他函数内部变量的函数。

def test1(k, b): def test1_1(x): print(k*x+b) return test1_1 t1 = test1(1, 2) t1(0) t1(1) t1(2)

闭包中修改数据

x = 300 def test1(): x = 200 def test2(): nonlocal x print("----1----x = {}".format(x)) x = 100 print("----2----x = {}".format(x)) return test2 t1 = test1() t1() 装饰器

实现对无参数函数的装饰器

def set_func(func): def call_func(): print("装饰器执行") func() return call_func @set_func # 等价于sumNum = set_func(sumNum) def sumNum(): print("sumNum") sumNum()

实现对有参数函数的装饰器

# 对有参数、无返回值的函数进行装饰 def set_func(func): def call_func(num): print("装饰器") func(num) return call_func @set_func def sumNum(num): print("sumNum = {}".format(num)) sumNum(100)

对不定长参数的函数进行装饰

def set_func(func): def call_func(*args, **kwargs): print("装饰器") func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) sumNum(100, 200, c=100)

对有返回值的函数进行装饰

def set_func(func): def call_func(*args, **kwargs): print("装饰器") return func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) return "200 ok" sumNum(100, 200, c=100)

多个装饰器对同一个函数装饰

def add_h1(func): def h1(): h1_str = "<h1>" + func() + "</h1>" return h1_str return h1 def add_a(func): def call_func(): a_str = "<a>" + func() + "</a>" return a_str return call_func @add_h1 @add_a def get_str(): return "haha" get_str()

输出为:<h1><a>haha</a></h1>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注易知道(ezd.cc)的更多内容!   

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    无法读取U盘中的数据

    无法读取U盘中的数据,,核心提示:我有一个512MB的U盘,把它插在电脑显示器里面是空的,但右键单击以查看已经使用USB 480mb文件的属性未设置为隐

    wps如何修改页眉上边距

    wps如何修改页眉上边距,WPS教程,1.WPS版word怎样设置页眉边距WPS中word设置页眉边距技巧“页边距”:页面上打印区域之外的空白空间。1、设

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    EXCEL数据透视表怎么用?是干什么的

    EXCEL数据透视表怎么用?是干什么的,透视,干什么,怎么,excel透视表:数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等