码迷,mamicode.com
首页 > 编程语言 > 详细

python基础之闭包与迭代器

时间:2020-06-09 22:09:13      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:nbsp   判断   dir   内存   ffffff   div   就是   基础   打印   

一、闭包

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基础之闭包与迭代器

标签:nbsp   判断   dir   内存   ffffff   div   就是   基础   打印   

原文地址:https://www.cnblogs.com/doit9825/p/13081154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!