#lambda表达式创建了一个之后能够调用的函数,但是他返回了一个函数而不是将这个函数赋值给一个变量名,因此也叫匿名函数
#lambda表达式形式:lambda arguments1,arguments2,...argumentsN:expression using arguments
#lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义,当需要小段执行代码编写进def语句从语法上不能编写进的地方时,lambda表达式作为def的一种速写来说是最为有用的
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函数相同
def knights():
title='sir'
action=(lambda x:title+' '+x)
return action
a=knights()
print(a('name')) #sir name
#lambda通常用来编写跳转表,也就是行为列表或者字典
l=[lambda x:x**2, lambda x:x**3, lambda x:x**4]
for f in l:
print(f(2)) #4 8 16
#同上效果
def f1(x):return x**2
def f2(x):return x**3
def f3(x):return x**4
l=[f1,f2,f3]
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
#如果要在lambda表达式中添加逻辑,可以使用三元表达式
lower=(lambda x,y:x if x<y else y)
print(lower('bb','aa')) #aa
print(lower('aa','bb')) #aa
#lambda表达式中执行循环
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
#lambda嵌套
action1=lambda x:lambda y:x+y
print(action1(1)(2)) #3
#常用于回调处理器
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()
#lambda表达式形式:lambda arguments1,arguments2,...argumentsN:expression using arguments
#lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义,当需要小段执行代码编写进def语句从语法上不能编写进的地方时,lambda表达式作为def的一种速写来说是最为有用的
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函数相同
def knights():
title='sir'
action=(lambda x:title+' '+x)
return action
a=knights()
print(a('name')) #sir name
#lambda通常用来编写跳转表,也就是行为列表或者字典
l=[lambda x:x**2, lambda x:x**3, lambda x:x**4]
for f in l:
print(f(2)) #4 8 16
#同上效果
def f1(x):return x**2
def f2(x):return x**3
def f3(x):return x**4
l=[f1,f2,f3]
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
#如果要在lambda表达式中添加逻辑,可以使用三元表达式
lower=(lambda x,y:x if x<y else y)
print(lower('bb','aa')) #aa
print(lower('aa','bb')) #aa
#lambda表达式中执行循环
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
#lambda嵌套
action1=lambda x:lambda y:x+y
print(action1(1)(2)) #3
#常用于回调处理器
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()