1.闭包的相关知识点
def func_150(val):
passline = 90
if val >= passline:
print('pass')
else:
print('failed')
def func_100(val):
passline = 60
if val >= passline:
print('pass')
else:
print('failed')
def set_passline(passline): #此处set_passline函数运用了闭包功能,在函数中设置一个子函数
def cmp(val):
if val >= passline:
print('pass')
else:
print('failed')
return cmp
f_100 = set_passline(60) #此时f_100实则是set_passline中的返回值cmp函数,有点像类的调用
f_150 = set_passline(90)
f_100(89)
f_150(89)
pass
failed
2.闭包中引用函数、装饰器
def my_sum(*arg):
return sum(arg)
def my_average(*arg):
return sum(arg)/len(arg)
def dec(func):
print('call dec')
def in_dec(*arg):
if len(arg) == 0:
return 0
for val in arg:
if not isinstance(val,int):
return 0
return func(*arg)
return in_dec
#在构造闭包函数时返回对象一定是一个函数
#my_sum = dec(my_sum)
#print(my_sum(1,2,3,4,5))
#print(my_sum(1,2,3,4,5,'6'))
#运用装饰器进行编码
@dec #此时的语法糖(@dec)一定要和之前定义的含有闭包的函数的函数名一致
def my_max(*arg):#my_max = in_dec,即是将my_max函数传入dec函数中
return max(arg)
print(my_max(1,2,3,4,5))#此时装饰器的作用和上面调用闭包函数的代码作用是一样的,但是用装饰器更加方便简洁
call dec
5
详解可见大神博客:https://blog.csdn.net/xiangxianghehe/article/details/77170585