2-2-10 函数-匿名函数&三元运算
- 匿名函数
传统的函数的定义包括了:函数名 + 函数体。
def send_email():
pass
# 1. 执行
send_email()
# 2. 当做列表元素
data_list = [send_email, send_email, send_email ]
# 3. 当做参数传递
other_function(send_email)
匿名函数,则是基于lambda表达式实现定义一个可以没有名字的函数,例如:
data_list = [ lambda x:x+100, lambda x:x+110, lambda x:x+120 ]
print( data_list[0] )
f1 = lambda x:x+100
res = f1(100)
print(res)
基于Lambda定义的函数格式为:lambda 参数:函数体
-
参数,支持任意参数。
lambda x: 函数体 lambda x1,x2: 函数体 lambda *args, **kwargs: 函数体
-
函数体,只能支持单行的代码。
def xxx(x): return x + 100 lambda x: x + 100
-
返回值,默认将函数体单行代码执行的结果返回给函数的执行这。
func = lambda x: x + 100 v1 = func(10) print(v1) # 110
def func(a1,a2):
return a1 + a2 + 100
foo = lambda a1,a2: a1 + a2 + 100
匿名函数适用于简单的业务处理,可以快速并简单的创建函数。
在编写匿名函数时,由于受限 函数体只能写一行,所以匿名函数只能处理非常简单的功能。
扩展:三元运算
简单的函数,可以基于lambda表达式实现。
简单的条件语句,可以基于三元运算实现,例如:
num = input("请写入内容")
if "苍老师" in num:
data = "臭不要脸"
else:
data = "正经人"
print(data)
num = input("请写入内容")
data = "臭不要脸" if "苍老师" in num else "正经人"
print(data)
# 结果 = 条件成立时 if 条件 else 不成立
lambda表达式和三元运算没有任何关系,属于两个独立的知识点。
掌握三元运算之后,以后再编写匿名函数时,就可以处理再稍微复杂点的情况了,例如:
func = lambda x: "大了" if x > 66 else "小了"
v1 = func(1)
print(v1) # "小了"
v2 = func(100)
print(v2) # "大了"
作业:
'''
请用列表推导式实现,对data_list中的每个元素判断,如果是字符串类型,则计算长度作为元素放在新列表的元素中;如果是整型,则让其值+100 作为元素放在新的列
'''
data_list = [11, 22, 33, "alex", 455, 'eirc']
# 提示:可以基于三元运算实现
new_data_list = [len(i) if type(i) != str else i + 100 for i in data_list]
data_list = [
(1, 'alex', 19),
(2, '老男', 84),
(3, '老女', 73)
]
# 请使用推导式将data_list构造生如下格式:
"""
info_dict = {
1:(1,'alex',19),
2:(2,'老男',84),
3:(3,'老女',73)
}
"""
info_dict = {i[0]:i for i in enumerate(data_list)}
print(info_dict)
'''
有4个人玩扑克牌比大小,请对比字典中每个人的牌的大小,并输入优胜者的姓名(值大的胜利,不必考虑A)。
'''
player = {
"武沛齐":["红桃",10],
"alex":["红桃",8],
'eric':["黑桃",3],
'killy':["梅花",12],
}
vi = sorted(player.items(),key=lambda x: x[1][1],reverse=True) [0][0]
print(vi)