--- title: Lambda Function fid: 20240110-105715 update: 20240110 tags: function, lambda, lambda funtion, function lambda --- # Lambda Function 2024-01-10 Lambda 函数就是匿名函数,为了不给函数名的一次性临时函数准备的。用得最多的是将匿名函数作为参数传给另一个函数,例如正则表达示替换。 ## Syntax ```python x = lambda a : a + 10 print(x(5)) #= 15 x = lambda a, b : a * b print(x(5, 6)) #= 30 ``` ## 函数记忆状态 下面的例子展示了嵌套调用。这种写法好像没什么实际用途啊? ```python def myfunc(n): return lambda a : a * n mydoubler = myfunc(2) print(mydoubler(11)) #= 22 ``` 上面的例子可以让函数 `myfunc()` 记住一个变量 2,这叫闭包。 Lambda 是和闭包紧密联系的。 ## 函数作为参数 ### user login 这只是一个说明概念的示例玩具程序,演示用户在登陆时,登陆处理函数里面使用另一个被作为参数传入函数来完成处理。 ```python 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 已知学生姓名与学号列表,请按学号排序 ```python students = [(1, "zhang"), (2, "li"), (3, "wang")] students.sort(key = lambda x: x[1]) ``` 如果不用匿名函数作为参数,那么等效的写法为: ```python def processing(x): return x[1] students.sort(key = processing) ``` sort() 内部会拿到 students 的每一个成员 x, 作为参数给被传进去的函数 key = processing 这种写法能实现给传进去的函数带两个参数吗? 无法从外部传参,因为参数是在 sort 内部传的。 ### 正则替换 See : [正则表示式替换](#regex-named-group)