Python3 闭包、匿名函数和内置函数filter

Python闭包   如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量

  • def FuncX(x):
        def FuncY(y):
            return x * y
        return FuncY
    
    tempFunc = FuncX(3)
    result = tempFunc(5)
    print(result)  # 15
    
    result = FuncX(3)(5)
    print(result)  # 15
    实例

匿名函数   

python 使用 lambda 表达式来创建匿名函数

  • lambda只是一个表达式,函数体比def简单很多
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
  • lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
  •  lambda函数的语法只包含一个语句: lambda [arg1 [,arg2,.....argn]]:expression
  • 冒号左边→想要传递的参数
  • 冒号右边→想要得到的数(可能带表达式)
  •  square = lambda x : x**2
     print(square(3))  # 9
     
     sum = lambda  x, y : x + y
     print(sum(2, 3))  # 5
    实例

内置函数filter的使用

function参数可传入None、函数、lambda表达式,iterable参数传入一个可迭代对象。

若function参数为None:返回可迭代对象中所有不为False的元素

若function参数为函数或lambda表达式:返回  将元素作为函数参数、函数返回值为True  的元素

  • reslut = filter(None, [1, 0, False, True])
    print(list(reslut))  # [1, True]
    
    def odd(num):
        return num % 2
    
    reslut = filter(odd, range(10))
    print(list(reslut))  # [1, 3, 5, 7, 9]
    
    reslut = filter(lambda num: num % 2, range(10) )
    print(list(reslut))  # [1, 3, 5, 7, 9]
    实例
 

猜你喜欢

转载自www.cnblogs.com/dx-Dark/p/9056420.html
今日推荐