欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python课程第九天_下午_课程笔记(列表生成式和生成器)

程序员文章站 2022-06-08 17:44:49
...

Day_09_PM_List_Generators

# 生成列表
l = [1, 2, 3, 4, 5]

l = list(range(1, 6))

l = []
for i in range(1, 6):
    l.append(i)

# 列表生成式/列表推导式: 掌握(存有限的比较少的数,占的内存较少)
l = [i for i in range(1, 6)]  # [1, 2, 3, 4, 5]
l = [i * i for i in range(1, 6)]  # [1, 4, 9, 16, 25]
l = [i for i in range(1, 6) if i % 2]  # [1, 3, 5], 1就是True,0是False不取
l = [i for i in range(1, 6) if i % 2 and i > 2]  # [3, 5]
l = [i for i in range(1, 6) if i % 2 and i < 5]  # [1, 3]
l = [i + j for i in '123' for j in 'abc']
#  => ['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

print(l)

l1 = [1, 2, 3, 4, 5]
l2 = [i * 10 for i in l1]  # [10, 20, 30, 40, 50]
print(l2)

# 字典生成式: 了解
d = {i: i * i for i in range(5)}  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
print(d)

# 集合生成式: 了解
s = {i * i for i in range(5)}  # {0, 1, 4, 9, 16}
print(s)

# 生成器: generator(可以用于需要很多内存的,一次调一个)
# 一般用于: 超多的数或无穷多个的数
g = (i for i in range(1, 6))  # <generator object <genexpr> at 0x00000000021580C0> (内存地址)
# print(g)  # 生成器对象(只能一个一个去用)


# 需要使用next()来调用生成器
# print(next(g))  # 1
# print(next(g))  # 2
# print(next(g))  # 3
# print(next(g))  # 4
# print(next(g))  # 5
# print(next(g))  # 报错了, StopIteration

# 使用for-in来调用生成器, 不会报错
for i in g:
    print('i =', i)
print()


# 生成器函数: 有yield关键字的函数
# yield:
#   1.写在函数中, 会让函数变成生成器函数
#   2.每次使用next调用,会在yield暂停
#   3,类似return,可以返回值,但是不会结束函数
def fg():
    print('111')
    yield 100  # 暂停并返回, 会继续往下走,

    print('222')
    yield 200
    print('333')


g = fg()
# print(g)  # 生成器对象

print(next(g))  # 100
print(next(g))  # 200
print(next(g))  # 300  StopIteration