【Python基础】函数进阶(匿名函数、装饰器、闭包等)

发布时间 2024-01-11 16:40:46作者: 小C学安全

简介

函数进阶的使用,包括匿名函数、装饰器、闭包等

匿名函数

指函数是没有函数名称的,临时使用的微函数。使用 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个条件:

  1. 内层函数的定义嵌套在外层函数中。
  2. 内层函数引用外层函数的变量
  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))

关注公共号