lambda arg1,arg2,arg3...: expression
匿名函数只能有一个表达式,不用写return,返回值就是该表达式的结果。
匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,再利用变量来调用该匿名函数。
概念
函数名的本质就是指向函数的变量,所以一个变量可以指向函数。
函数的参数能够接收变量,那么一个函数就可以接收另外一个函数作为参数,这种函数就称为高阶函数。
def add(x, y, f):
return f(x) + f(y)
print(add(-1, 5, abs))
# 6
常见高阶函数
1. map:会根据提供的函数对指定序列做映射
map(function, iterable, ...)
print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
# [1, 4, 9, 16, 25]
2022.9.10更新
突然好奇for循环、列表推导式和map函数的性能差异,所以写了个测试代码:
from time import time
if __name__ == '__main__':
epoch=int(1e+7)
start = time()
arr = []
for i in range(epoch):
arr.append(i ** 2)
print(time() - start) # 2.8252151012420654
start = time()
arr = [x ** 2 for x in range(epoch)]
print(time() - start) # 2.192713975906372
start = time()
arr = map(lambda x: x ** 2, range(epoch))
print(time() - start) # 0.08975982666015625
我只能说map简直是神一般的存在。
2. reduce:会对参数序列中元素进行累积
from functools import reduce
reduce(function, iterable[, initializer])
from functools import reduce
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))
# 15
3. filter:用于过滤序列,返回由符合条件元素组成的新列表
print(list(filter(lambda x: x % 2 == 1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))
# [1, 3, 5, 7, 9]
4. sorted:对所有可迭代的对象进行排序操作
sorted(iterable, cmp=None, key=None, reverse=False)
# key:排序的规则
什么是闭包?
闭包其实就是一个函数。
如何创建闭包?
如何使用闭包?
# 以求两个数的和为例
def funcOut(num1):
def funcIn(num2):
return num1 + num2
return funcIn
f=funcOut(100)
print(f(200))
# 300
在Python中使用装饰器,需要使用一个特殊的符号@来实现。
在定义装饰器函数或类时,使用“@装饰器名称”的形式将符号“@”放在函数或类的定义行之前。
from functools import partial
xxx=partial(func,args=...)