lambda匿名函数 | 您所在的位置:网站首页 › 请用lambda表达式定义一个函数 › lambda匿名函数 |
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 实验室设备网 版权所有 |