三元表达式和各种生成式
一、三元表达式
什么是三元表本质?
1、是对简单的代码进行缩写,简单的来说就是偷懒的写法减少代码行数
2、三元表达式只适合较为简洁的条件判定,较为复杂的判定建议不要用这种方式写代码,因为比较让他人难以理解。
3、三元表达式不建议嵌套使用,因为三元表达式是为了简化代码,嵌套后反而看着更复杂了。
三元表达式语法结构
if条件判定为真时的结果+if 判定条件 else+if条件判定为假时的结果
如果if后面的条件成立,则使用if前面真的时候值
如果if后面的条件不成立,则使用else后面假的值
# 简化步骤1:代码简单并且只有一行 那么可以直接在冒号后面编写
name = 'jason'
# if name == 'jason':print('老师')
# else:print('学生')
# 三元表达式
res = '老师' if name == 'jason' else '学生'
print(res)
"""
数据值1 if 条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套
"""
二、各种生成式
生成式总共有三种:列表生成式、字典生成式、集合生成式。元组类型没有生成式,元组类型叫生成器,会生成一个类似工厂的东西,不会直接生成列表。
生成式的作用:用于对数据类型中的所有数据值进行进行相同操作
表现形式:
new_list = [name + "_NB" for name in name_list]
左边是变量名绑定修改后的结果,右边最外层的是最后生成数据的类型,通常来说我们都是用的什么生成器就在外层使用什么类型对应的外层符号。内层for循环左边的代码是规定进行的操作,for循环的作用就是一个个取值进行修改,因为外层套着框,所以修改后的值就依次保存在列表中了,如果是字典和集合的话因为本身的无序性,输出结果的时候可能会没有顺序。
列表生成式
# name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
# 给列表中所有人名的后面加上_NB的后缀
# for循环
# new_list = []
# for name in name_list:
# data = f'{name}_NB'
# new_list.append(data)
# print(new_list)
# 列表生成式
# 先看for循环 每次for循环之后再看for关键字前面的操作
# new_list = [name + "_NB" for name in name_list]
# print(new_list)
# 复杂情况
# new_list = [name + "_NB" for name in name_list if name == 'jason']
# print(new_list)
# new_list = ['大佬' if name == 'jason' else '小赤佬' for name in name_list if name != 'jack']
# print(new_list)
# 集合生成式
# res = {i for i in 'hello'}
# print(res)
# 元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)
# res = (i+'SB' for i in 'hello')
# print(res)
# for i in res:
# print(i)
字典生成式
# 字典生成式
# s1 = 'hello world'
# for i,j in enumerate(s1,start=100):
# print(i,j)
# d1 = {i: j for i, j in enumerate('hello')}
# print(d1)
注:这里的i和j相当于进行了解压赋值操作,如果这里只有一个变量名,就等于绑定了一对键值对,这时候输出的值就键值对,两个变量的时候就是分别输出键和值。
enumerate方法是给输出的值输出一个序号,可以自己设置起点的值。
集合生成式
# 集合生成式
# res = {i for i in 'hello'}
# print(res)
没什么特点,就是输出结果的时候是无序的
元组生成器(稍微介绍一下区别)
形式跟生成式差不多但是功能不一样
# 元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)
# res = (i+'SB' for i in 'hello')
# print(res)
# for i in res:
# print(i)
生成的结果如果跟生成式一样输出的话,只能看到函数名称,如果使用for循环打印生成的结果的话就可以看到生成的一个个值