匿名函数

匿名函数语法:
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

转载请注明本网址。