持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
大家好,我是木大木大,因为疫情和环境原因啊,在家开始了自学python的路子,从此深坑加一人。后面我会每天持续更新一些学习python的过程,当然一开始就是一些基础啦,希望大家多多支持,莫嫌弃啦~
1.1 生成器
生成器就是一个可迭代对象
next()
g = (x for x in range(10))
print(next(g))
g = (x for x in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
0
1
2
3
4
r = (x for x in range(1,6))
print(next(r))
print(next(r))
print(next(r))
print(next(r))
print(next(r))
print(next(r)) # 报错,只遍历五个值
a = 10
b = a
b = 5
只要没有被对象引用,那么python就会有垃圾回收机制将其回收掉
for循环的本质就是在调用next()
r = (x for x in range(1,6))
for i in r: # next(r)
print(i)
创建生成器的两种方式
1.(i for i in range(1,10))
2. yield 关键字实现
def f():
print("hello world")
yield 1
print(f()) # f()生成器对象 # <generator object f at 0x0000024E841B14A0>
g = f()
print(next(g)) # hello world 1
def a(): # a()是生成器
print("f1")
yield 1
print("f2")
yield 2
g = a()
next(g) # f1
next(g) # f2
print(next(g)) # f1 1
print(next(g)) # f2 2
def a():
print("f1")
yield 1
print("f2")
yield 2
for i in a(): # next()
print(i) # f1 1 f2 2
从现象来看,只要是可以for循环的都是可迭代对象
从本质来看,是内置有iter方法的是可迭代对象
记住for循环本质:能循环是因为内部有一个iter方法
可迭代对象:对象拥有iter方法的
yield 和return有一定的区别:
return:在函数中返回某个值,然后函数结束运行。一般没有返回值类型,就不用写return
yield:带yield的函数是一个生成器,在函数内部碰到yield的时候,函数会返回某个值,并停留在这个位置,当下次执行函数后,会在上次停留的位置继续运行
1.2 迭代器
生成器都是迭代器
什么是迭代器:
1.有iter方法
2.有next方法
l = [2,4,6]
d = iter(l)
print(next(d))
print(next(d))
print(next(d))
2
4
6
for循环内部本质是2个事情
1.调用可迭代对象的iter方法返回一个迭代器
2.不断调用迭代器的next方法
for i in [1,2,3]:
print(i) # [1,2,3].__iter__() ——》iter([1,2,3])
ator = iter([1,2,3])
while True:
try:
print(next(ator))
except StopIteration:
break
今天的内容就到这里咯,感谢观看哇~