11. 前⽅⾼能-迭代器
一,函数名的使用
函数名是个变量,但他是个特殊的变量,与括号配合可以执行函数的变量
1. 函数名的内存地址
2. 函数名可以赋值给其他变量
3. 函数名可以当做容器类的元素
4. 函数名可以当做函数的参数
5. 函数名可以作为函数的返回值
二,闭包
闭包:内层函数,对外层函数的变量的引用
def func():
name = 'alex'
def func1():
print(name)
func1()
func()
结果是alex,以上就是一个闭包
我们可以使⽤__closure__来检测函数是否是闭包. 使⽤函数名.__closure__返回cell就是
闭包. 返回None就不是闭包
闭包的作用就是让一个变量能够常驻内存,供后边的程序使用.
三. 迭代器
str,list,tuple,dict,set,文件操作的句柄(r)这些都是可迭代对象,都遵循可迭代协议.
我们可以通过dir函数来查看类中定义好的所有方法.
s = '我的哇哈哈'
print(dir(s))
print(dir(s))
print('__iter__' in dir(lst) ) 判断是不是可迭代对象
print('__next__' in dir (lst)) 判断是不是迭代器
迭代对象只用有__iter__就行
迭代器必须要__iter__ 和 __next__ 都有才行
for循环的机制:
for i in [1,2,3]:
print(i)
lst = [1,2,3]
lst_iter = lst.__iter__()
while Ture:
try:
i = lst_iter.__next__()
print(i)
except StopIteration:
break