04_06、三元表达式、生成式、匿名函数
一、三元表达式
三元表达式是针对简单if...else句式的便捷用法,可以减少代码书写量
1、三元表达式格式
res = a if 条件 else b
res表示:如果满足条件返回a,否则返回b
2、三元表达式嵌套
res = a if 条件1 else (‘hello’ if 条件2 else ‘world’)
res表示:如果满足条件1,返回a,否则执行(‘hello’ if 条件2 else ‘world’);
‘hello’ if 条件2 else ‘world’,如果满足条件2,返回‘hello’,否则返回‘world’
三次嵌套、四次嵌套,都依次类推
3、实际应用
# 让用户输入判断 cmd = input('username:').strip() res = '帅哥' if cmd == 'ly' else 'dsb' print(res)
二、列表生成式
列表生成器是简单for循环在列表内使用的便捷方法,生成一个列表形式的表达式,可以减少代码书写量
其他方式也可以实现,且更能满足多种条件下应用
所以一般不使用列表生成式,了解即可
1、传统方式:
# 现在有一个列表,要求给列表中的每个元素添加‘_dl’ l = ['ly', 'jason', 'tom'] new_list = [] # 定义一个空列表,用于改变后的新内容 for i in l: new_list.append(i + '_dl') # 给l的每一个元素添加‘_dl’ print(new_list)
2、列表生成式
for循环条件下的列表生成式
res = [i + '_dsb' for i in l]
# 现在有一个列表,要求给列表中的每个元素添加‘_dl’ l = ['ly', 'jason', 'tom'] new_list = [] # 定义一个空列表,用于改变后的新内容 res = [i + '_dsb' for i in l] print(res)
if...else条件下的列表生成式(列表生成式和三元表达式结合使用)
res = [i + '_dsb' if i != 'jason' else i for i in l]
# 现在有一个列表,要求给列表中的每个元素添加‘_dl’,除了jason l = ['ly', 'jason', 'tom'] new_list = [] # 定义一个空列表,用于改变后的新内容 res = [i + '_dsb' if i != 'jason' else i for i in l] print(res)
三、字典生成式
1、传统方式:
# l1中的元素作为字典的k,l2中的元素作为字典的v l1 = ['name', 'age', 'hobby'] l2 = ['ly', 18, 'music'] # 定义一个空字典 new_dict = {} for i in range(len(l1)): # 以l1的长度作为循环的范围,也就是0,1,2,3 new_dict[l1[i]] = l2[i] print(new_dict)
2、字典生成式
补充知识点:enumerate枚举
# l1中的元素作为字典的k,l2中的元素作为字典的v l1 = ['name', 'age', 'hobby'] l2 = ['ly', 18, 'music'] # 补充:enumerate枚举 # 定义一个空字典 new_dict = {} res = {l1[i]: l2[i] for i, j in enumerate(l1)} print(res) # 结果为{'name': 'ly', 'age': 18, 'hobby': 'music'}
补充:集合生成式同理,但是没有元组生成式,所谓的元组生成式其实是生成器,生成器也是自定义的迭代器
四、匿名函数
1.定义
指没有名字的函数
2、格式
lambda 参数:返回值
3、实例对比
1、非匿名函数得出一个数的平方
# 传统方式 # 这是一个得出平方的有参函数 def index(x): return x ** 2 print(index(3)) # 得出结果9
2、匿名函数得出一个数的平方
注意:匿名函数一般不单独使用,匿名函数跟内置函数结合使用才是常规做法
# 匿名函数 lambda x: x ** 2 # x是参数:x**2是返回值 print(lambda x: x ** 2) # 返回<function <lambda> at 0x00000240273FBD08> print((lambda x: x ** 2)(3)) # 写入实参,可以得到返回值 # 返回9,注意lambda x: x ** 2 和 实参3 都必须用括号括起来
4、结合内置函数map使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通