迭代器
1.迭代概念
就是迭代是重复反馈过程的活动,也可以粗俗的理解为可以用for循环。
那啥东西可以迭代呢?List、元组Tuple、字典Dictionary、字符串String等数据类型都是可迭代的。
我们下面就来 验证一下:
(这里就介绍一个判断一个东西是否可以迭代的方法)
from collections import Iterable # 引入这个模块
print(isinstance('abc',Iterable)) # isinstance ‘需要判断的对象’
结果输出: True
这里只介绍了字符串,其他的我就不赘述了。
2.迭代器和可迭代的关系
下面就来介绍什么是迭代器,迭代器和可迭代有什么关系呢?
可迭代Iterable与迭代器Itertor这两个名词很相似,很多初学者搞不清楚两者的区别,甚至认为它们是一样的。虽然可迭代和迭代器关系密切,但二者却不是一个概念。
迭代器必定可迭代,但可迭代不一定是迭代器。
可迭代:之所以对象可迭代,是因为在底层中这个对象有一个__iter__( )方法,通过这个方法我们可以实现for循环
迭代器:迭代器中有两个方法__iter__( )方法和__next__( )方法,这就是上面那段话的原因。__next__( )可以通过next(item)访问下一个元素。
通过实验,我判断了列表、字典、元组、字符串不是迭代器,因为它们没有__next__( )方法
3.生成迭代器的方法
iter( )函数
举例:
from collections import Iterator
a = [1, 2, 3, 4, 5]
print(isinstance('a',Iterator))
b =iter(a) # 这个Iter方法是内置函数,引用上面那个模块是为了迭代器
print(isinstance(b,Iterator))
结果输出: False True
闭包
1.闭包的引入
在谈闭包之前,我们先来谈一个简单的例子:就是关于引用的问题
2.闭包概念
简单来说就是函数里面再定义一个函数,并且内函数用到了外函数的变量。
这里需要注意的是,当执行funcb(2)时,之前传的test(1)还管用么? 管用!因为test_in函数要用到test里面的值,所以执行完1的时候,它并没有被销毁,里面定义的变量什么的都会保存。
3.闭包举例
def line(a,b):
def in_line(x):
return a*x+b
return in_line
line1=line(2,1)
print(line1(2))
输出:5
这两个函数应用闭包的话,就是将函数分成两段,减少传参修改量。(我感觉我这个例子举得有点不恰当,等下回找到更好的例子再来补充)
今天突发奇想,想了一个还比较好的例子。假如你去银行办理业务,进入大门机器人人脸识别功能,它能够得到你的名字。然后说出:“谁谁,你好。”
# 办业务(闭包)
context = ',你好'
def task(name):
def robot():
print('%s'%name+context)
return robot
line1 = task('张三')
line1()
结果输出:
张三,你好。
这里例子讲的是,外面这个函数传入的参数对里面的函数很重要,这也是闭包用法的重要原因之一。那假如你得到你的名字之 后,机器人传给柜台,柜台办业务也就方便很多。
总结:
在实际的开发中,闭包主要是用来封装变量和收敛权限的。