python基础——匿名函数

匿名函数

  • 通过 lambda 表达式创建,一个没有名的函数
lambda a, b: a + b
 和普通函数的区别(只在创建时有区别):
  • 1. 使用 lambda 关键字,而不是 def 创建
  • 2. 创建时:不需要指定名字,不需要指定返回值
  • 3. 不可以包含注释
  • 4. 不允许有换行(不可以包含语句块)
  • 5. 整个表达式,只有参数和返回值2个部分。
add = lambda a, b: a + b # 给匿名函数一个名字 ,和普通函数没有区别 

print(add(1, 1)) 

 

 两种不同的调用方式:
# 方式一
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为 : ", sum(10, 20))

# 方式二
l = (lambda arg1, arg2: arg1 + arg2)(10, 20)
print("相加后的值为 : ", l)

 

难点是什么?
1. 定义函数时,创建作用域
2. 当匿名函数出现在函数中的时候,创建闭包作用域
错把闭包的问题,当作匿名函数的问题
复制代码
def f(*args):
    l = []
    for arg in args:
        l.append((lambda: arg + 1)())  #调用lambda函数
    return l


print(f(1, 2, 3, 4, 5))


[2, 3, 4, 5, 6]
复制代码

 

复制代码
def f(*args):
    l = []
    for arg in args:
        l.append((lambda: arg + 1))  #未调用
    print(f'{arg=}')  #闭包作用域,最后一次循环时的值
    return l


l=f(1, 2, 3, 4, 5)   #在外部调用
print(l)
for i in l:
    print(i())

arg=5
[<function f.<locals>.<lambda> at 0x000002B4591FDEA0>, <function f.<locals>.<lambda> at 0x000002B4591FDF30>, <function f.<locals>.<lambda> at 0x000002B4591FDFC0>, <function f.<locals>.<lambda> at 0x000002B4591FE050>, <function f.<locals>.<lambda> at 0x000002B4591FE0E0>]
6
6
6
6
6

复制代码

 

posted @   奋斗的sunny  阅读(401)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示