【Python基础】函数进阶(匿名函数、装饰器、闭包等)
简介
函数进阶的使用,包括匿名函数、装饰器、闭包等
匿名函数
指函数是没有函数名称的,临时使用的微函数。使用 lambda 表达式
来声明,语法格式如下:
lambda [arg1 [arg2 , ... , argn] ] : 表达式
* [arg1 ,arg2 , ... , argn ] 为函数的参数列表,可有可无。
* 表达式: 表示函数体,必须有返回值
* 注意:lambda 表达式只可以包含一个表达式,计算结果可看作是一个函数的返回值。虽然不允许包含复杂的语句,但表达式可以调用其它函数。
sum =lambda x,y: x+y
print(sum(5,10))
已上代码相当于
def sum(x,y):
return x+y
lambda 表达式声明的匿名函数,也可以作为自己定义函数的实参
带判断的lambda
lambda 表达式声明的匿名函数,也可以作为内建函数的实参
闭包
如果内层函数引用了外层函数的变量(包括其参数),并且外层函数返回内层函数名,这种函数架构称为闭包。闭包满足的如下3个条件:
- 内层函数的定义嵌套在外层函数中。
- 内层函数引用外层函数的变量
- 外层函数返回内层函数名
例如:
list =["小C学安全","python","java"]
def a(list):
def b():
return print(list[0])
return b
c =a(list)
c()
装饰器
装饰器本质上还是函数,让其它的函数在不做任何代码修改的情况下,增加额外的功能
概念:一个以函数作为参数并返回一个替换函数的可执行函数。装饰器的本质是一个嵌套函数,外层函数的参数是被执行的函数,内层函数是一个闭包并在其中增加新功能(装饰器的功能函数)
def test1(test3):
def test2():
return test3()
return test2
@test1
def test3():
print("输出test3()函数")
return 1
print(test3())
#输出test3()函数
#1
通过@符号和装饰器名实现装饰器函数与被装饰函数联系,当调用func()函数时,程序会自动调用装饰器函数的代码
偏函数
在复用函数的情况下,有时我们在使用已有函数时,可能会固定其中的部分参数,可以使用默认值参数外,还可以使用偏函数,用来固定函数调用时部分或全部参数的函数叫做偏函数
def add1(a, b, c):
return a + b + c
def add2(a, b):
return add1(a, b, 10) # 参数c 为固定的参数。
print(add2(1, 2))