匿名函数
匿名函数语法:
lambda x: expression
python使用关键字lambda来创建匿名函数。冒号前面的x表示函数参数。匿名函数只能有一个表达式,不用写return,返回值是表达式的结果。
例如:
lambda x: x * x
相当于
1
2
|
def f(x):
return x * x
|
1
2
|
f = lambda x: x * x
print(f(5)) # 25
|
匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:
例如:
1
2
3
4
5
|
a = 10
b = lambda x: x * x # 定义匿名函数,并赋值给变量b。b是函数对象。
print(type(b)) # 查看变量b的类型
result = b(a) # 调用函数
print(result) # 结果100
|
执行以上程序会输出如下结果:
1
2
|
<function <lambda> at 0x101c6ef28>
100
|
无参匿名函数
语法:
lambda : expression
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
i = lambda : 10
t = lambda : True
# 打印无参匿名函数对象
print(i)
print(t)
# 打印无参匿名函数类型
print(type(i))
print(type(t))
# 调用无参匿名参数
print(i())
print(t())
|
执行以上程序会输出如下结果:
1
2
3
4
5
6
|
<function <lambda> at 0x7f579a87fbf8>
<function <lambda> at 0x7f579a78d158>
<class 'function'>
<class 'function'>
10
True
|
匿名函数i和t,等价于下面的def定义的函数
1
2
3
4
5
|
def i():
return 10
def t():
return True
|
带参数匿名函数
lambda x: expression
# 一个参数
lambda x,y,z: expression
# 多个参数
lambda x=2: expression
# 带有默认值参数
lambda *x: expression
# 元组参数
lambda **x: expression
# 字典参数
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
a = lambda x: x
b = lambda x,y,z: x + y + z
c = lambda x,y=10: x+y
d = lambda *x: x
e = lambda **x: x
# 打印无参匿名函数对象
print(a)
print(b)
print(c)
print(d)
print(e)
# 打印无参匿名函数类型
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
# 调用无参匿名参数
print(a(5))
print(b(5,10,20))
print(c(5))
print(d(('hello','world')))
print(e(a=1,b=2))
|
执行以上程序会输出如下结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<function <lambda> at 0x7f8fb9a20bf8>
<function <lambda> at 0x7f8fb992e158>
<function <lambda> at 0x7f8fb992e1e0>
<function <lambda> at 0x7f8fb992e268>
<function <lambda> at 0x7f8fb992e2f0>
<class 'function'>
<class 'function'>
<class 'function'>
<class 'function'>
<class 'function'>
5
35
15
(('hello', 'world'),)
{'a': 1, 'b': 2}
|
等价于下面的def定义的函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def a(x):
return x
def b(x,y,z):
return x+y+z
def c(x,y=10):
return x+y
def d(*x):
return x
def e(**x):
return x
|
嵌套使用
匿名函数可以嵌套到普通函数中,匿名函数本身做为return的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def add(x):
return lambda y: x+y
a = add(10)
# 打印匿名函数对象
print(a)
# 打印匿名函数类型
print(type(a))
# 调用匿名参数
print(a(20))
|
执行以上程序会输出如下结果:
1
2
3
|
<function add.<locals>.<lambda> at 0x7fcd78a5c158>
<class 'function'>
30
|
等价于下面的def定义的函数
1
2
3
4
|
def add(x):
def a(y):
return x+y
return a
|
例如,加减乘除四则运算。
1
2
3
4
5
6
7
|
calculator{
'plus' : lambda x,y : x + y,
'subtract' : lambda x,y : x - y,
'multiply' : lambda x,y : x * y,
'divide' : lambda x,y : x / y
}
res = calculator['plus'](2, 3) #res = 5
|
匿名函数直接调用
语法:
(lambda x: expression)(参数1,参数2,……)
例如:
1
2
|
result = (lambda x,y: x + y)(5,10)
print(result) #输出结果 15
|
转载请注明本网址。