Python函数之迭代器
一、Python迭代器
1.1、函数的运用
# 直接使用函数名其打印效果为函数在内存的地址 def f(): print("Its Ok") print(f) # 函数名可以直接赋值给一个变量来使用 def f(): print("aaaa") print(f) x = f #把函数名赋值给一个变量来使用 print(x()) # 把函数名来当一个容器使用 def x(): print("aaaa") def y(): print("bbbb") def z(): print("cccc") lis = [x,y,z] for i in lis: print(i()) # 函数名可以当作函数的参数来使用 def x(): print("aaaa") def y(z): print("yyyyy") z() print("yyyy...") y(x) # 函数名可以作为函数的返回值 def x(): print("aaaa") def y(): print("bbb") print("aaa....") return y z = x() print(z())
二、闭包
闭包就是内层函数调用外层函数的变量(非全局)引用为闭包
# 闭包内层函数调用外层的变量a引用就成为闭包 def f(): a = "aaaa" def x(): print(a) x() print(f()) # 闭包内层函数调用外层的变量a引用就成为闭包 def f(): a = "aaaa" def x(): print(a) x() print(x.__closure__) #其结果显示为cell 非None为闭包,如返回None则不是闭包 print(f()) def x(): a = "Its OK" def y(): print(a) return y z = x() print(z()) ## def x(): def y(): a = "111111" def z(): print(a) return z return y print(x()()())
三、迭代器
# str、list、dict、tuple、set都是可迭代的对象
# dict字典在迭代过程中为Key
# 列表 li = [1,2,3,4] print(dir(li)) # 字典 dic = {"x":1,"y":2,"z":3} print(dir(dic)) # 元组 s = ("a","b") print(dir(s)) # 集合 se = (1,2,4,5,5) print(dir(se)) # 查看对象是否是可迭代对象,可以通过isintensce()函数来查看对象是什么类型 ls = [1,2,3,4] l = ls.__iter__() from collections import Iterable from collections import Iterator print(isinstance(ls,Iterable)) print(isinstance(ls,Iterator)) print(isinstance(l,Iterable)) print(isinstance(l,Iterator))
3.1、for循环机制
x = "收到噶打工啊阿凡达" y = x.__iter__() #获取一个迭代器 print(y.__next__()) #依次迭代 获取元素 print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__())
使用while循环和迭代器来模拟for循环机制
ls = [1,2,3,4,5] x = ls.__iter__() while 1: try: y = x.__next__() print(y) except StopIteration: break # Iterable:可迭代对象,包含__iter__()函数 # Iterator:迭代器,包含__iter__()和__next__()函数 # # 迭代器:节省内存,惰性机制,不能反复 只能向下执行.
四、递归函数
是在函数里调用这个函数本身为递归函数,当函数不受外力阻止会一直执行下去,每次调用函数都会产生一个属于自己都命名空间。
此就会占用太多内存空间,为此python将强制递归层数控制在996左右(具体根据个人电脑通过报错信息还来查看,此值不是固定值)
# 通过报错信息来查看递归执行层数 def x(n): print(n) n += 1 x(n) x(0)
# 递归循环思路,带入一次函数体,直至满足函数体条件,然后返回retur def f(n): if n == 1: return 40 else: return f(n-1)+2 print(f(4))