python基础之闭包与迭代器

Posted doit9825

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础之闭包与迭代器相关的知识,希望对你有一定的参考价值。

一、闭包

1.写法:在外层函数中声明一个变量,在内存函数使用或者返回这个变量。

这个结构叫闭包。

def fun1():
    a=10
    def fun2():
    print(a)
return fun2

这种结构就叫做闭包

2.作用:

1).保护变量

2).使变量常驻内存

__closure__:有东西,就是闭包;None就不是闭包

def outer():
    a = 10 # 常驻内存
    def inner():
        print(a) # 在内部使用的外面的变量
    return inner # 返回了内部函数
ret = outer()
print(ret.__closure__) # 有东西, 就是闭包. None就不是闭包
打印结果:(<cell at 0x03831310: int object at 0x5073E840>,)

 

二、迭代器

迭代器:

1.Iterable 可迭代的对象,里面包含了__iter__(),可以使用for循环

包括str,list,tuple,dict,set,open(),range()

2.Iterator:迭代器,里面包含了__iter__()和__next__(),也可以使用for循环

3.dir() 查看某数据类型中可以执行的方法

lst = [1,2,3,4]
print(dir(lst))

4.从那么多个方法里面找‘__iter__‘太难了,用下面这个判断有没有这个方法

lst = [1,2,3,4]
it = dir(lst)
print(‘__iter__‘ in it)

5.总结特点

1)节省内存

2)惰性机制:只有执行__next__()才执行

3)只能向前,不能反复

6.用while实现for循环

lst = [1,2,3,4]
it = lst.__iter__()
while 1:
    try:
        print(it.__next__())
    except StopIteration:
        print(结束了)
        break
for el in lst:
    print(el)
else:
    print(结束了)
 
lst = [1,2,3]
it = dir(lst)
print(__next__ in it)
print(it)

 

from collections import Iterable # 可迭代的            
from collections import Iterator # 迭代器             
                                                   
lst = ["周润发","麻花藤","刘刘刘"]                           
print(isinstance(lst, Iterable)) # instance  实例, 对象
print(isinstance(lst, Iterator)) # instance  实例, 对象
                                                   
it = lst.__iter__()                                
print(isinstance(it, Iterable)) # instance  实例, 对象 
print(isinstance(it, Iterator)) # instance  实例, 对象 

 

以上是关于python基础之闭包与迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Python概念之装饰器迭代器生成器

python之函数闭包可迭代对象和迭代器

Python--核心2(生成器,迭代器,闭包,装饰器)之生成器

Python高手之路python基础之迭代器与生成器

python中的闭包,迭代器.

python基础之循环与迭代器