Lambda Function

2024-01-10

Lambda 函数就是匿名函数,为了不给函数名的一次性临时函数准备的。用得最多的是将匿名函数作为参数传给另一个函数,例如正则表达示替换。

Syntax

x = lambda a : a + 10
print(x(5))              #= 15

x = lambda a, b : a * b
print(x(5, 6))           #= 30

函数记忆状态

下面的例子展示了嵌套调用。这种写法好像没什么实际用途啊?

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)
print(mydoubler(11))     #= 22

上面的例子可以让函数 myfunc() 记住一个变量 2,这叫闭包。

Lambda 是和闭包紧密联系的。

函数作为参数

user login

这只是一个说明概念的示例玩具程序,演示用户在登陆时,登陆处理函数里面使用另一个被作为参数传入函数来完成处理。

def login(name, login_process):
    if name in ["Tom", "Alice"]:
        # 这里是一段和 login 相关的处理
        # 部分处理过程要用到从外面传入的函数
        message = 'Hello' + login_process(name)
        print(message)
    else:
        print("Invalid user")

# 传入不同的函数,完成为完成不同的功能
login("Tom", lambda x : x.upper())
login("Tom", lambda x : x+x)

list sort

已知学生姓名与学号列表,请按学号排序

students = [(1, "zhang"), (2, "li"), (3, "wang")]
students.sort(key = lambda x: x[1])

如果不用匿名函数作为参数,那么等效的写法为:

def processing(x):
    return x[1]
students.sort(key = processing)

sort() 内部会拿到 students 的每一个成员 x, 作为参数给被传进去的函数 key = processing

这种写法能实现给传进去的函数带两个参数吗? 无法从外部传参,因为参数是在 sort 内部传的。

正则替换

See : 正则表示式替换