函数编程——匿名函数与lambda(一)
python允许用lambda关键字创造匿名函数。
匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句。
但是,作为函数,它们也能有参数。
一个完整的lambda“语句”代表了一个表达式,这个表达式的定义体必须和声明放在同一行。
参数时可选的,如果使用参数的话,参数通常也是表达式的一部分。
核心知识点:
用合适的表达式调用一个lambda生成一个可以像其他函数一样使用的函数对象。
它们可以被传给其他函数,用额外的引用别名化,作为容器对象以及可调用的对象被调用。(如果需要,可以带参数)
当被调用的时候,如果给定相同的参数的话,这些对象会生成一个和相同表达式等阶的结果。
它们和那些等价表达式计算值相同的函数是不能区分的。
可以来看个简单的例子:
>>> def true(): ... return True ... >>> lambda:True <function <lambda> at 0x000002B6A99BBF28> >>> TRUE = lambda:True #上面都是创建两个总是返回True的函数 >>> true() True >>> TRUE() True #可以发现结果完全是相同的
上面的例子说明,使用匿名函数完全是行得通的。
我们还可以将lambda表达式赋值给一个如列表和元祖的数据结构,同时默认以及可变的参数也是允许的。
>>> def kebi(x,y=2): #我可以设置默认值 ... return x+y ... >>> a = lambda x,y =2:x+y #我也可以设置默认值 #上面两个函数功能一样 >>> def maoxian(*z):return z #参数收集返回元祖 ... >>> >>> b = lambda *z:z #收集我也可以 #上面两个函数功能也一样 #光说不练可不行 >>> a(3) #有默认值 5 >>> a(4,5) 9 >>> kebi(3) 5 >>> kebi(4,5) 9 >>> maoxian(1,2,'z','iu13') #函数定义的只有一个参数,却可以收集多个到一个元祖里面 (1, 2, 'z', 'iu13') >>> b(1,2,'z','iu13') (1, 2, 'z', 'iu13')
最后再来阐述一个问题,为什么要给函数赋值一个变量?
>>> a = lambda x,y =2:x+y
之前在使用传统函数的总是不明白为啥要赋值?
我们可以把每个函数看作是一个对象,漂浮在内存中。
我们虽然创建了一个函数,但没有地方保存它,也没有调用它。
这个函数在创建的时候引用计数被设置为True,但是如果,没有引用,计数又会回到零,这样就会被垃圾回收。
为了保存对象,可以把它赋值到一个变量上,以后也就可以随时调用,也不会自动被删除了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理