0%

三探迭代、递归、循环

导入:

补充知识:

迭代、递归与循环:迭代与递归都是循环的子集,一个是取值推算,一个是不断的调用自己。 相同点:迭代、递归、循环都是“重复” 相似点:调用逻辑相似 不同点:我简单理解为迭代是根据自身的上一个值推算下一个值,而递归则是由上一个值与“己身”直接运算。循环是自身与外界计算 堆栈关系调用不同 当然也不能说谁好谁坏,只能说三者主针对不同

来,来,来,翠花上栗子:

递归,归去来兮 :

1
2
3
4
5
6
7
8
9
10
11
12
def func(i):
i -= 1
if i == 1:
return 1
else:
print(i)
return func(i)

print(func(8))
# 输出结果:7654321
print(func(4))
# 输出结果:321

迭代,更新换代(单单以数值方面考虑,凸显堆栈方面就。。。)

1
2
3
4
5
6
7
8
9
10
# 迭代
List = ['1','2','3']
i = 0
while True:
printList[i])
i += 1
# 循环、也有点递归的意思。小问题,小问题,这里探究迭代与循环
count = 0
while True
count = count + 1

个人思考及感悟:如何判断生成器与迭代器?:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
区分循环、迭代
循环:与外界计算,重复亦或者

区分迭代器与生成器
迭代器:
可以被next()函数调用并不断返回下一个值的对象称为迭代器
生成器:
不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到出现
StopIteration
可使用isinstance()方法判断是否是Iterator对象

g = (i ** i for i in range(1, 10))
print(next(g))
print(next(g))
print(next(g))
。。。 。。。
for j in g:
print(j)

迭代器是什么?

迭代取值的工具,迭代是个循环,但不是重复的过程。每次的值都基于上次的值而来。迭代是特殊的重复

迭代器能做什么?

迭代取值;程序中用的比较多就是先存后取 用时在释放。释放next()函数,以及遍历

迭代器怎么使用?

​ next(可迭代对象) 或者 可迭代对象. next () 以及在函数中yield关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def foo():
print("starting...")
while True:
res = yield 4
print("res:", res)

g = foo()
print(next(g))
print("*" * 20)
print(next(g))
print(next(g))
print(next(g))

'''
starting...
4
********************
res: None
4
res: None
4
res: None
4
'''

带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数