Python基础11_函数名运用,闭包,迭代器

一. 函数名的运用
函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
1. 函数名的内存地址
2. 函数名可以赋值给其他变量
3. 函数名可以当做容器类的元素 列表里面可以装函数名
4. 函数名可以当做函数的参数
5. 函数名可以作为函数的返回值
二. 闭包
闭包就是内层函数对外层(非全局)函数的变量的引用
我们可以使用__closure__来检测函数是否是闭包,使用函数名.closure ,返回cell就是闭包,返回None就不是闭包
在函数外调用内部函数,如果是多层嵌套,只需要一层一层往外层返回就行了
def func1():
name = "alex"
def func2():
print(name)
return func2
f = func1()
f()
闭包的好处:(1)保护变量不被侵害,(2)保持一个变量常驻内存(局部变量常驻于内存只能闭包)爬虫
三. 迭代器
可迭代对象有:str,list,tuple,dict,set range
iterable可迭代的,
查看一个对象是否可迭代的方法:
(1)使用dir()函数查看类中定义好的所有方法,找__iter__函数
print(dic(list))
(2)使用isinstance()函数来查看
lst = [1, 2, 3]
from collections import Iterable
print(isinstance(lst, Iterable))
迭代器:可以被next()函数调用并不断返回下一个值的对象成为迭代器 Iterator
判断一个对象是否是迭代器:
from collections import Iterator
print(isinstance([], Iterator))
综上,如果对象中有__iter__函数,那么我们认为这个对象遵守了可迭代协议,就可以获取到相应的迭代器,这里的__iter__是帮助我们获取到对象的迭代器,我们使用迭代器中的__next__来获取到一个迭代器中的元素(list,dict,str都是Tterable但不是Iterator,可以通过iter()函数获取到迭代器,再通过next()函数调用并不断返回下一个数据)
for循环的本质原理:通过不断调用next()函数实现的
使用while循环和迭代器来模拟for循环,
lst = [1, 2, 3]
lst_iter = lst.iter()
while 1:
try:
i = lst_iter.next()
print(i)
except StopIteration:
break
总结:
Iterable: 可迭代对象, 内部包含 iter()函数
Iterator: 迭代器, 内部包含 iter() 同时包含 next()
迭代器的特点:(1).节省内存.(2).惰性机制(3).不能反复,只能向下执行

原文地址:https://www.cnblogs.com/guyannanfei/p/10099044.html