python 匿名函数 lambda

#lambda表达式形式:lambda arguments1,arguments2,...argumentsN:expression using arguments

f=lambda x,y,z:x+y+z
print(f(2,3,4))     #9

#默认参数也能够在lambda参数中使用,就像在def中使用中一样
x=(lambda a='fee',b='fie',c='foe':a+b+c)
print(x())      #feefiefoe

def knights():
    title='sir'
    action=(lambda x:title+' '+x)
    return action

a=knights()
print(a('name'))     #sir name

#lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义,当需要小段执行代码编写进def语句从语法上不能编写进的地方时,
#lambda表达式作为def的一种速写来说是最为有用的
l=[lambda x:x**2, lambda x:x**3, lambda x:x**4]
for f in l:
    print(f(2))     #4  8  16

key='got'
result={'already':(lambda :2+2),'got':(lambda :2*4),'one':(lambda :2**6)}[key]()
print(result)    #8

lower=(lambda x,y:x if x<y else y)
print(lower('bb','aa'))     #aa
print(lower('aa','bb'))     #aa

import sys
showall=lambda x:list(map(sys.stdout.write,x))
showall(['a','b','c'])    #abc

showall1=lambda x:[sys.stdout.write(i) for i in x]
showall1(['a','b','c'])     #abc

#嵌套lambda表达式和作用域
#lambda表达式能够获取任意上层lambda中的变量名
def action(x):
    return (lambda y: x+y)

l=action(1)
print(l(2))    #3

action1=(lambda x:lambda y:x+y)
a=action1(11)
print(a(22))    #33

#常用于回调处理器
def onPress(s):
    print(s)

import sys
from tkinter import Button, mainloop
#x=Button(text='Press me', command=lambda :sys.stdout.write('spam\n'))
x=Button(text='Press me', command=lambda : onPress('aaaaaa'))
x.pack()
mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_37016700/article/details/78834905