lambda匿名函数 您所在的位置:网站首页 请用lambda表达式定义一个函数 lambda匿名函数

lambda匿名函数

2023-08-17 22:24| 来源: 网络整理| 查看: 265

lambda表达式 lambda表达式可以用来声明匿名函数,也就是没有函数名字的临时使用的小函数,尤其适合需要一个函数作为另一个函数参数的场合。也可以定义具名函数。lambda表达式只可以包含一个表达式,该表达式的计算结果可以看作是函数的返回值,不允许包含复合语句,但在表达式中可以调用其他函数。 语法: = lambda : >>>f = lambda x, y, z: x+y+z #f是表达式的名字 >>> f(1,2,3) #像函数一样调用 6 lambda函数

lambda函数返回函数名作为结果

lambda函数是一 种匿名函数,即没有名字的函数使用Lambda保留字定义,函数名是返回结果lambda函数用于定义简单的、能够在一行内表示的函数

= lambda : 等价于 def () : return

>>> f = lambda x, y, z: x+y+z >>> f(1,2,3) 6 >>> g = : lambda x, y=2, z=3: x+y+Z >>> g(1) 6 >>> g(2, z=4, y=5) 11 #可以给lambda表达式起名字#像函数- -样调用 #参数默认值 #关键参数 lambda函数主要用作一 些特定函数或方法的参数 lambda函数有一些固定使用方式,建议逐步掌握一般情况,建议使用def定义的普通函数 (input parameters)=>expression

仅当Lambda只有一个输入参数时,括号才是可选的;否则括号是必须的。括号内的两个或更多输入参数使用逗号加以分割:

(x, y)=>x==y

有时,编译器难以或无法推断输入类型,如果这种出现这种情况,你可以显示指定类型:

(int x, string s)=>s.length>x

使用空括号指定领个输入参数:

( )=>SomeMethod()

Lambda语句

Lamdba语句与Lambda表达式类似,只是语句括在大括号中:

( input parameters ) => { statement ;}

例如:

delegate void TestDelegate(string s); static void Main(string[] args) { //Lambda语句用于创建委托 TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); }; myDel("Hello"); }

lambda嵌套 在外层嵌套被调用的时候,嵌套在内的lambda能够获取到在外层函数作用域中变量名x的值。

>>> def action(x): >>> return (lambda y:x + y) >>> act = action(99) >>> act(2) 101 >>> def increment(n): >>>return lambda x: x+n >>> f=increment(4) >>> f(2) 6

出于对代码可读性的考虑,一般最好避免使用嵌套的lambda

注:

lambda是一个表达式,而不是语句。所以lambda能够出现在Python语法不允许def出现的地方。lambda的主体是一个单独的表达式,而不是一个代码块。lambda是一个表达式,而不是语句

一些实例:

例1: 字符串联合,有默认值,也可以x=(lambda…)这种格式

>>> x = (lambda x="Boo",y="Too",z="Zoo": x+y+z) >>> x("Foo") 'FooTooZoo'

例2: 和列表联合使用

>>> L = [lambda x:x**2,\ lambda x:x**3,\ lambda x:x**4] >>> for f in L: ... print f(2) ... 4 8 16 #也可以如下面这样调用 >>> print L[0](3) 9

例3: 和字典结合使用

>>> key = 'B' >>> dic = { 'A': lambda: 2*2,\ ... 'B': lambda: 2*4,\ ... 'C': lambda: 2*8} >>> dic[key]() 8

例4: 求最小值

>>> lower = lambda x,y: x if x>> lower('aa','ab') 'aa'

例5: 和map及list联合使用

>>> import sys >>> showall = lambda x:list(map(sys.stdout.write,x)) >>> showall(['Jerry\n','Sherry\n','Alice\n']) Jerry Sherry Alice >>> showall(['Jerry','Sherry','Alice']) JerrySherryAlice #等价于下面 >>> showall = lambda x: [sys.stdout.write(line) for line in x] >>> showall(('I\t','Love\t','You!')) I Love You![None, None, None]

例6: 在Tkinter中定义内联的callback函数

>>>import sys >>>from Tkinter import Button,mainloop >>>x = Button(text='Press me', >>>command=(lambda:sys.stdout.write('Hello,World\n'))) >>>x.pack() >>>x.mainloop() Hello,World! Hello,World!

例7: lambda和map联合使用,

>>> out = lambda *x: sys.stdout.write(' '.join(map(str,x))) >>> out('This','is','a','book!\n') This is a book!

例8: 判断字符串是否以某个字母开头

>>> print (lambda x: x.startswith('B'))('Bob') True —— >>> Names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach'] >>> B_Name= filter(lambda x: x.startswith('B'),Names) >>> B_Name ['Bob', 'Barbara']

例9: lambda和map联合使用:

>>> squares = map(lambda x:x**2,range(5)) >>> squares [0, 1, 4, 9, 16]

例10. lambda和map,filter联合使用:

>>> squares = map(lambda x:x**2,range(10)) >>> filters = filter(lambda x:x>5 and x>> filters [9, 16, 25, 36, 49]

参考地址 参考地址2



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有