32 三元表达式、生成式、生成器表达式

173次阅读
没有评论

共计 1736 个字符,预计需要花费 5 分钟才能阅读完成。

一. 三元表达式

1. 三元表达式适用于

  • 条件成立返回一个值
  • 条件不成立返回一个值

2. 判断两个数的大小

🍔使用函数来写代码
def max2(x,y):
    if x > y:
        return x
    else:
        return y
res = max2(3,4)
print(res)       # 4

🍔使用三元表达式
x = 3
y = 4
res = x if x > y else y
print(res(3,4))  # 4

🍔函数加三元表达式
def max2(x,y):
    return "ok" if x > y else "no"
print(max2(3,4)) # no

二. 生成式(推导式)

1. 列表生成式(推导式)

🍔使用 "for" 循环实现
l = []
for i in range(6):
    l.append(i)
print(l)    # [0, 1, 2, 3, 4, 5]

🍔生成式一行实现
l = [i for i in range(6)]
print(l)    # [0, 1, 2, 3, 4, 5] 
  • 示例小练习
names = ["songhh","shawnhh","hai","xing"]

🍔将 "hh" 结尾的放入一个列表
l = [len(i) for i in names if i.endswith("hh")]
print(l)    # ['songhh', 'shawnhh']

🍔将其劝变为大写
l = [i.upper() for i in names]
print(l)    # ['SONGHH', 'SHAWNSHH', 'HAI', 'XING']
  • 小练习 2
🍔打印文件中字符的最长长度
with open(r"a.txt","rt",enconding="utf-8")as f:
    nums = [len(i) for i in f]
    print(max(nums))

2. 字典生成式(推导式)

🍔
res = {i:i for i in range(3)}
print(res)  # {0: 0, 1: 1, 2: 2}

🍔
info = {"name":"shawn","age":18,"sex":"man"}
res = {k:v for k,v in info.items()}
print(res)  # {'name': 'shawn', 'age': 18, 'sex': 'man'}

3. 集合生成式(推导式)

sets = {i for i in range(9) if i >4}
print(sets)        # {8, 5, 6, 7}
print(type(sets))  # <class 'set'>  

三. 生成器表达式

1. 创建生成器的两种方式

  • 调用带 yield 关键字的函数
  • 使用生成器表达式

2. 生成器表达式 🆚 列表生成式

  • 语法 : 语法 类似, 生成器表达式使用 (), 列表生成式使用 []
  • 返回值 :
  • 列表生成式返回一个 列表
  • 生成器表达式返回一个 生成器对象
  • 内存占用 :
  • 列表生成式返回的列表元素直接 放在内存中
  • 生成器表达式返回的是生成器, 一次只 产生一个值 , 更节省空间

3. 生成器表达式示例

  • 小示例 1:
🍔制作一个生成器
res = (i for i in range(6))
print(res)
print(next(res))  # 0
print(next(res))  # 1
print(next(res))  # 2
print(next(res))  # 3
print(next(res))  # 4
print(next(res))  # 值取完抛出异常 StopIteration

🍔打印文件里字符最长长度 (切换 "b" 模式比较字节)
with open(r"a.txt","rt",encoding="utf-8")as f:
    res = (len(i) for i in f)  # 得到一个生成器
    print(res)        # <generator object <genexpr> at 0x000001949AD7AAC8>
    print(max(res))
  • 小示例 2:
🍔统计文件的字符个数 (切换 "b" 模式统计字节)
with open(r"aaa.txt","rt",encoding="tuf-8")as f:
    lens = 0
    for i in f:
        lens += len(i)
    print(lens)

🍔使用列表生成式 "[]" 配合 "sum()" 函数
res = sum([len(i) for i in f])
print(res)

🍔使用生成器表达式 "()" 配合 "sum()" 函数
res = sum((len(i) for i in f))
🔰 "sum( )" 会自动迭代取出生成器对象里面的值进行相加, so 可以不用加两层括号
res = sum(len(i) for i in f)
print(res)
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计1736字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)