python :闭包,匿名函数,decorater装饰器

#python闭包

  • 封装
  • 提高代码复用
  • 内层函数引用外层函数的变量,返回内层函数
  • 返回函数不可以为循环变量
    示例1:
#标准线不同时,判断学生的成绩是否通过
方法1:
def pass_60(val) :   #标准线为60时,判断是否通过
	passline = 60
	if val > passline :
		print("pass")
	else :
		print("No pass")
	def pass_90(val) :   #标准线为90时,判断是否通过
		passline = 90
		if val > passline :
			print("pass")
		else :
			print("No pass")
	方法2:闭包实现
	def pass_line(passline) :
		def cmp(val) :
			if val > passline :
				print("Pass")
			else :
				print("No pass")
		return cmp
	#调用函数
	f_60 = passline(60)
	f_60(100) ------>print("pass")
	f_60(29)  ------->print("No pass")

#将函数作为参数传递闭包

#方法1
def my_sum (*args) :
	if len(args) == 0 : return 0
	for val in args :
		if not isinstance(val, int):
			return 0
    return sum(args)
def my_ave(*args) :
if len(args) == 0 : return 0
	for val in args :
		if not isinstance(val, int):
			return 0
    return sum(args)/len(sum)
   #方法2  :通过闭包实现
   def my_sum (*args) :
    return sum(args)
def my_ave(*args) :
    return sum(args)/len(sum)
def dec(Func) :
    def in_dec(*args) :
        if len(args) == 0: return 0
        for val in args:
            if not isinstance(val, int):
                return 0
        return Func(*args)
    return in_dec
my_sum = dec(my_sum(1,2,3,4,5)

#python中的匿名函数

  • 关键字lambda表示匿名函数
  • 函数形式:lambda args : 表达式
  • 匿名函数只能有一个表达式,return ,返回值为表达式的结果
  • 匿名函数不需要定义函数名,直接创建函数对象,简化代码
    示例1:
    #返回x的值
 val = lambda x : x if x > 0 else -x
 print(val(1))

示例2:
#返回列表中的元素的平方列表

val = map(lambda  x :x*x,[1,2,3,4,5,6])
print(list(val))
#等价于
def Func(x) :
	return x*x
val =map(Func,[1,2,3,4,5,6])
print(list(val))

示例3:

#源代码
def Function(s) :
    return s and len(s.strip()) > 0
val = filter(Function,["Herry","","Gerry"])
print(list(val))
#代码简化
val = filter(lambda s:s and len(s.strip())> 0,["Herry","","Gerry"])
print(list(val))

#decorator装饰器

  • 实质:闭包的使用
def dec(Func) :
    def in_dec(*args) :
        if len(args) == 0: return 0
        for val in args:
            if not isinstance(val, int):
                return 0
        return Func(*args)
    return in_dec
@dec   #对闭包的使用
def my_sum (*args) :
    return sum(args)
def my_ave(*args) :
    return sum(args)/len(sum)

猜你喜欢

转载自blog.csdn.net/Mr_zhangbz/article/details/83959377