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]