应⽤场景
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
lambda语法
lambda 参数:返回值
lambda其实是一个匿名函数,没有具体名字,可以用一个函数名对它进行接收,如果直接打印函数名,返回的是函数的地址。
f=lambda x : 2*x
print(f)
print(f(3))
<function <lambda> at 0x000001AA83321F28>
6
lambda的参数形式
⽆参数
fn1 = lambda: 100
print(fn1())
100
⼀个参数
fn1 = lambda a: a
print(fn1('hello world'))
hello world
默认参数
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))
130
可变参数:*args
fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))
(10, 20, 30)
这⾥的可变参数传⼊到lambda之后,返回值为元组。
可变参数:**kwargs
fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))
{'name': 'python', 'age': 20}
列表数据按字典key的值排序
有时候我们需要按列表中元素的某个维度对列表进行排序,此时就可以使用到lambda表达式。下面的列表中每个元素都是一个字典,我们希望按字典中的name对列表进行排序。
不使用lamba表示的形式
students=[
{"name":"Bob","age":2},
{"name":"Jason","age":3},
{"name":"Taylor","age":54},
{"name":"Smith","age":8},
]
def findName(x):
return x["name"]
students.sort(key=findName)
print(students)
students.sort(key=findName,reverse=True)
print(students)
[{'name': 'Bob', 'age': 2}, {'name': 'Jason', 'age': 3}, {'name': 'Smith', 'age': 8}, {'name': 'Taylor', 'age': 54}]
[{'name': 'Taylor', 'age': 54}, {'name': 'Smith', 'age': 8}, {'name': 'Jason', 'age': 3}, {'name': 'Bob', 'age': 2}]
使用lamba表示的形式
students=[
{"name":"Bob","age":2},
{"name":"Jason","age":3},
{"name":"Taylor","age":54},
{"name":"Smith","age":8},
]
students.sort(key=lambda x:x["name"])
print(students)
students.sort(key=lambda x:x["name"],reverse=True)
print(students)
[{'name': 'Bob', 'age': 2}, {'name': 'Jason', 'age': 3}, {'name': 'Smith', 'age': 8}, {'name': 'Taylor', 'age': 54}]
[{'name': 'Taylor', 'age': 54}, {'name': 'Smith', 'age': 8}, {'name': 'Jason', 'age': 3}, {'name': 'Bob', 'age': 2}]