匿名函数与lambda

lambda函数介绍

  • python允许使用lambda关键字来创造匿名函数,lambda是一个表达式,也可以说是一个匿名函数。
lambda [arg1[, arg2, ... argN]]: expression
# expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。
  • lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。包含的表达式不能超过一个。参数是可选的,如果使用参数的话,参数通常也是表达式的一部分。
# 单行语句不带参数
def true(): 
    return True

# 带参数
def sum(x, y):
        return x + y

# 条件表达式
def foo(x):
    if x == 1:
        return 'yes'
    else:
        return 'no'
  • lambda表现形式:(没有参数返回一个True)
lambda :True
# 这里因为既没有保存lambda创建的函数,也没有调用它,因此它的引用计数由函数创建时的True为0,被垃圾回收掉。

lambda x, y: x + y
# 将lambda表达式的值赋值给元组

lambda x: 'yes' if x == 1 else 'no'
# expression1 if A else expression2,如果A为True,条件表达式的结果为expression1,否则为expression2 
  • lambda也支持默认参数以及可变参数
# 默认参数,这里默认y = 5
>>> a = lambda x, y=5: x+y
>>> a(0)
5
>>> a(1,7)
8

# 可变参数
>>> b = lambda *x: x
>>> b(2)
(2,)
>>> b(3, 1)
(3, 1)

lambda函数使用场合

  • 函数式编程:尽管 Python 算不上是一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,像 map、reduce、filter、sorted 这些函数都支持函数作为参数,lambda 函数就可以应用在函数式编程中。
# 按照元素的绝对值进行排序
>>> a_list = [1, -2, 4, 0, 6]
>>> sorted(a_list, key=lambda x: abs(x))
[0, 1, -2, 4, 6]
  • 闭包:在一个函数中定义另一个函数,并且内部函数可以引用外部函数的参数和局部变量,每次调用外部函数都返回新的函数。
>>> def my_add(n):
        return lambda x: x+n
...
>>> add_3= my_add(3)
>>> add_3(7)
10

注释:这里的lambda函数就是闭包,涉及到全局作用域和局部作用域。

  • 由于lambda函数的可读性较差,应避免在代码中大量使用。

你可能感兴趣的:(匿名函数与lambda)