2-2-10 函数-匿名函数&三元运算

  1. 匿名函数

传统的函数的定义包括了:函数名 + 函数体。

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)  
  

posted @ 2022-10-20 22:45  布丁家的苏苏  Views(5)  Comments(0)    收藏  举报