############ 递推 ############## def factorial_num(x): if x == 0: return 1 return x * factorial_num(x-1) # 调用了定义的函数,并在前面给出了最后一步递归数据的取值 res = factorial_num(5) print(res) ############ 迭代 ############## def factorial_num1(y): res = 1 if y == 0: return res for i in range(2,y+1): # 通过循环语句来实现迭代的功能 res *= i return res print(factorial_num1(5))
一般来说递归方法可以用在代码量比较少的程序之中,但由于其时间复杂度很高的缘故,一般在中大型程序中一般使用迭代方法
l = [1,2,3,4] # 列表是可迭代对象 iter_l = l.__iter__() # 要想迭代取值 必须用迭代器对象取值,所以要将可迭代对象转化为迭代器对象 print(iter_l.__next__()) print(iter_l.__next__()) print(iter_l.__next__()) print(iter_l.__next__()) # 如果取完了 直接报错,只能往后取不能后退
值得注意的是,无论迭代器对象执行多少次,__iter__得到的还是迭代器本身
l = [1,2,3,4,5,6,7,8] iter_l = l.__iter__() while True: try: print(iter_l.__next__()) except StopIteration: # 报错时结束循环,不会出现报错信息 break
def func(): print(‘first‘) yield 666,67 # 函数内如果有yield关键字,那么加括号执行函数的时候并不会触发函数体代码的运行,并且假如是多组数据会以元组的形式输出 print(‘second‘) yield 777 print(‘third‘) yield 888 print(‘forth‘) yield 999 print(func().__next__()) g = func() # 生成器初始化:将函数变成迭代器对象 print(g.__next__())
res = (i for i in range(1,100000000) if i != 4) # 生成器表达式 print(res) """ 生成器不会主动执行任何一行代码 必须通过__next__触发代码的运行 """ print(res.__next__()) print(res.__next__()) print(res.__next__()) print(res.__next__())
原文:https://www.cnblogs.com/ITchemist/p/11192306.html