Python的匿名函数

易小灯塔
2017-08-07 / 0 评论 / 577 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2018年01月16日,已超过2506天没有更新,若内容或图片失效,请留言反馈。

为什么Lisp语言如此先进?

如果我们把流行的编程语言,以这样的顺序排列:Java、Perl、Python、Ruby。你会发现,排在越后面的语言,越像Lisp。

Python模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能,也一起模仿了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。

编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。

-- 《黑客与画家》

Python匿名函数应该就是借鉴的Lisp语言的特点

  • 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
  • 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题
  • 使用lambda在某些时候然后代码更容易理解

python 使用 lambda 来创建匿名函数

lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的。 在Python中,lambda作为一个关键字,作为引入表达式的语法。想比较def函数,lambda是单一的表达式,而不是语句块!

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法 lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

#  lambda 参数列表:return [表达式] 变量
#  由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收1234 

实例一

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2;

# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 )) # 相加后的值为 :  30
print ("相加后的值为 : ", sum( 20, 20 )) # 相加后的值为 :  40
1234567 

实例二

对字典排序

infors = [{"name":"wang","age":10},{"name":"insmoin","age":20},{"name":"banzhang","age":10}]

infors.sort(key=lambda x:x['age']) #根据age对字典排序

print(infors)

# 排序结果  [{'name': 'wang', 'age': 10}, {'name': 'insmoin', 'age': 10}, {'name': 'xiaoming', 'age': 20}]1234567 

实例三

把lambda当一个变量

def test(a,b,func):
    result = func(a,b)
    return result

num = test(11,22,lambda x,y:x+y)
print(num) 

image-20201107151425979

0

评论 (0)

取消