lambda匿名函数:
特征:
- 没有函数名,没有括号
- 只能实现简单的表达式计算或函数调用
- 函数体中不能使用return if while for in,可以使用 if实现的三目运算
格式:
lambda 形参1 形参2 : 单行表达式或函数调用
使用场景:
不能实现复杂功能,在使用时一般会用于实现一些简单的,一次性使用的场景
python中一切都是对象,每个对象都有内存地址,都会有一个引用,通过这个引用就可以找到对象并使用它
func = lambda x: x+2
print(func)
print(func(2))
lambda默认返回的是表达式的计算结果,不需要添加return
func = lambda m, n: m if m > n else n
print(func)
print(func(10, 2))
print(func(0, 2))
map
map() 根据提供的函数对指定序列进行映射
对参数列表中的每一项执行某个函数并返回每一项的执行结果
list = [2, 4, 6, 8]
# map需要利用这个函数计算每一个元素的映射值,因为该函数有且只能有一个参数
def func(x):
return x + 1
res = map(func, list)
for i in res:
print(i)
3
5
7
9
利用lambda代替函数传参
list = [2, 4, 6, 8]
def func(x):
return x + 1
res_list = map(lambda n : n + 1, list)
for i in res_list:
print(i)
map实现原理
list = [2, 4, 6, 8]
def func(x):
return x + 1
def my_map(func, list):
new_list = []
for i in list:
n = func(i)
new_list.append(n)
return new_list
res_list = my_map(lambda n: n + 1, list)
print(res_list)
reduce:
reduce函数对参数序列中的元素进行累计(求和 拼接)
import functools
list = [1, 2, 3, 4, 5]
def func(a,b):
return a + b
res = functools.reduce(func, list)
print(res)
使用lambda作为reduce参数
import functools
list = ['h', 'e', 'l', 'l', 'o']
res = functools.reduce(lambda a, b: a + b, list)
print(res)
filter 过滤序列,过滤掉不符合条件的元素,返回一个filter对象,如果要转换为列表,可以使用list()
接受两个参数,函数和序列,序列中每个元素传递给函数,返回过滤为true的元素
mylist = ['1212', ' ', 'hi', '312', 'abc12', '123abc']
res = filter(lambda s: s.isdigit(), mylist)
print(res)
for s in list(res):
print(s)
sort排序字典:
默认sort是不能对字典进行比较排序的,但可以通过key指定排序方式
my_list = [
{
'id': 1,
'name': 'jack',
'age': 12
},
{
'id': 3,
'name': 'rose',
'age': 20
},
{
'id': 2,
'name': 'jerry',
'age': 18
}
]
my_list.sort(key=lambda x: x['id'])
print(my_list)