11 Lambda表达式
Lambda就一个表达式,而不是语句。 Lambda的本质就是定义一个匿名的函数。11.1 Lambda表达式的基本格式
变量 = lambda 变量1,变量2,..变量n : 执行的操作
例如,如果要实现两个变量的相加,传统来说,会如下编写:
def add(x, y):
return x + y
print(add(3, 5))
如果是要lambda表达式来实现,可以如下编写:
其中实现了return x+y的操作,但是不需要写return语句
f = lambda x, y: x + y
print(f(1, 2))
11.2 函数中的例子
11.2.1 例子的代码
函数可以将一个函数名称传递个另外一个函数的形参。
可以通过dict类型来实现switch的结构。
需求:实现用户输入姓名,选择输入的语言,打印相应的语言向用户问好
代码1,最简单的方式,其中日语用的是lambda表达式的方式
def hello_chinese(name):
print('你好', name)
def hello_english(name):
print('Hello', name)
while True:
name = input('请输入你的姓名:\n')
if name == 'q':
break
lang = input('请选择语言:\n c是中文\n e是英文\n j是日文\n')
f = lambda name: print('こんにちは', name)
if lang == 'c':
hello_chinese(name)
elif lang == 'e':
hello_english(name)
elif lang == 'j':
f(name)
代码2,对上述进行改进,直接使用lambda表达式进行函数的调用
其中注释掉了f = lambda name:print(' ',name)的代码,直接进行函数的调用。
lambda表达式定义的是一个匿名函数,可以赋值给一个变量进行操作。也可以自行操作。
def hello_chinese(name):
print('你好', name)
def hello_english(name):
print('Hello', name)
while True:
name = input('请输入你的姓名:\n')
if name == 'q':
break
lang = input('请选择语言:\n c是中文\n e是英文\n j是日文\n')
#f = lambda name: print('こんにちは', name)
if lang == 'c':
hello_chinese(name)
elif lang == 'e':
hello_english(name)
elif lang == 'j':
(lambda name: print('こんにちは', name))(name)
代码3,使用dict实现switch语句的结构
def hello_chinese(name):
print('你好', name)
def hello_english(name):
print('Hello', name)
while True:
name = input('请输入你的姓名:\n')
if name == 'q':
break
lang = input('请选择语言:\n c是中文\n e是英文\n j是日文\n')
dict_lan = dict(c=hello_chinese,
e=hello_english,
j=lambda name: print('こんにちは', name)
)
dict_lan.get(lang, hello_chinese)(name)
代码3,使用委托
本质就是传递一个函数名称过来,以下的例子没有进行判断,实际需要进行判断,定义了一个hello,用于接收函数名称和变量
def hello_chinese(name):
print('你好', name)
def hello_english(name):
print('Hello', name)
def hello(action,name):
action(name)
while True:
name = input('请输入你的姓名:\n')
if name == 'q':
break
lang = input('请选择语言:\n c是中文\n e是英文\n j是日文\n')
hello(hello_chinese,name)
11.2.2 例子的原理
定义了一个hello的函数,其中用两个变量,一个是action,会指向不同的函数,相当于委托相关的函数进行执行。两外一个是name,是传递过来的一个变量。
11.2.3 函数工具
将list中的所有元素都加上5
方法1 : 使用for循环
listA = list(range(1,11))
res = []
for x in listA:
res.append(x+5)
print(res)
结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法2 : 使用推导
listA = list(range(1,11))
res = [x+5 for x in listA]
print(res)
结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法3 : 使用map函数
listA = list(range(1, 11))
def add_num(x):
return x + 5
res = list(map(add_num, listA))
print(res)
结果:[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法4:使用filter函数
扩展阅读:https://www.cnblogs.com/xinjing-jingxin/p/9048005.html
filter和map的区别
listA = list(range(1, 11))
def find_even(x):
if x % 2 == 0:
return True
else:
return False
res = list(filter(find_even, listA))
print(res)
结果:[2, 4, 6, 8, 10]
如果并没有定义find_even函数,并且只想用一次,可以使用lambda表达式。
listA = list(range(1, 11))
res = list(filter(lambda x: x % 2 == 0, listA))
print(res)
上面的例子如果用map呢,可以看到filter和map的区别,filter具有过滤的功能。
listA = list(range(1, 11))
def find_even(x):
if x % 2 == 0:
return True
else:
return False
res = list(filter(find_even, listA))
print(res)
res = list(map(find_even, listA))
print(res)
结果:[2, 4, 6, 8, 10]
[False, True, False, True, False, True, False, True, False, True]
实际开发中,推导的效率会更高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步