迭代器
一,函数名的运用
函数名是一个变量,他是一个特殊的变量,与括号配合可以执行函数的变量.
1,函数名的内存地址
1 def func(): 2 print('hehe') 3 return 4 print(func) 5 a = func 6 print(a)
2.函数名可以当做函数的参数
1 def func(fn): 2 fn() 3 def gn(): 4 print('woshi') 5 l = func(gn) 6 print(l)
3.函数可以当做函数的返回值
def func(): def inner(): print('你好') return inner ret = func() ret()
二,闭包
闭包就是内层函数对外层函数(非全局)的变量的引用,叫闭包
def func(): name = '你好' def func2(): print(name) func2() func()
__closure__来检测函数是否是闭包,使用函数名_closure_返回cell就是闭包,返回None就不是闭包
检测是否为闭包的实验
def func(): name = '你好' def func2(): print(name) func2() print(func2.__closure__) #检测是否是闭包 func() 结果 你好 (<cell at 0x000001D4BB3D94F8: str object at 0x000001D4BD027348>,)
闭包询问的外部的函数变量是常驻内存的,而且是安全的,高效的
三,迭代器
可迭代对象:str list tuple f dict
dic()是查看一个对象数据类型都包含哪些
s = '王尼玛' print(dir(s)) #查询对象的数据类型都有哪些
检查是否对象有没有这个数据类型的方法
s = '王尼玛' print(dir(s)) print('_iter_' in dir(s)) #如果有在返回Ture说明是在的否则Flase
迭代器的获取
lst = ['nihao','nihsi','lal'] li = lst.__iter__() #迭代器的获取 print(li.__next__()) #下一步 print(li.__next__()) #下一步 print(li.__next__()) #下一步 结果 nihao nihsi lal
模拟FOR循坏
1 lst = ['nihao','nihsi','lal'] 2 # 模拟for循坏 3 li = lst.__iter__() #先获取迭代器 4 while 1 : 5 try: #尝试的拿元素 6 k = li.__next__() 7 print(k) 8 except StopIteration: #元素拿完了 不报错 9 break 10 11 12 结果 13 nihao 14 nihsi 15 lal
可迭代对象的检测
l = [1,2,3] # form collections import Iterable #可迭代的 # form collections import Iterable #迭代器 # print(isinstance(l,Iterable)) print('__iter__' in dir(l)) #确定是一个可迭代器 print('__next__' in dir(l)) #确定不是一个迭代器
四.五个英文单词
isinstance: 用于判断一个对象的数据类型
Iterable : 可迭代对象
Iterable: 迭代器
__iter__ __next__ 都含有为迭代器
只含有__iter__为可迭代对象

浙公网安备 33010602011771号