生成器 解析

# -*- coding:utf-8 -*-

# ******* 生成器 最初模版  帮助理解
def test():
    yield 1   # yield 相当于 return
    yield 2   # yield 返回一个生成器内存地址
              # 可以多次yield
g = test()
print(g)
print(next(g))   # 用next取值
print(next(g))


# ******** 三元表达式
a = 'a'
res = '正确' if a == 'a' else '错误'
print(res)


# ********* 列表解析式  帮助理解以下
a = []
for i in range(10):
    a.append(i)
print(a)
# * 在列表中直接for循环返回值
l = [i for i in range(10)]
print(l)
# * 三元表达式在列表循环
l = [i for i in range(10) if i >4]
print(l)


# ********* 生成器
a = (i for i in range(10))   # 小括号返回生成器对象 中括号返回列表
print(a)
print(next(a))      # 使用next取值
print(next(a))
# * 生成器不会占用太多内存,取一个拿一个
# * 列表会直接生成,放到内存中

# * 使用 map 函数生成器
l = [1, 2, 3, 4]
a = map(str, l)   # 返回一个生成器内存地址
print(next(a))
# * 使用 zip 函数
l1 = zip(l)
print(next(l1))   # 可用 next 取值
# * 使用 reduce 函数
from functools import reduce
q = [1, 2, 2, 2]
l2 = reduce(lambda x,y:x+y, q)   # print(sum(q)) 作用相同 但是占用内存太多
print(l2)                        # print(sum(i for in range(100))) 生成器方式,占用内存少



猜你喜欢

转载自blog.csdn.net/weixin_42100915/article/details/80201634