Python中的迭代器和生成器,以及装饰
Posted 潜水闲鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的迭代器和生成器,以及装饰相关的知识,希望对你有一定的参考价值。
一、迭代器
它是一个带状态的对象,他能在你调用next()
方法的时候返回容器中的下一个值,任何实现了__iter__
和__next__()
方法的对象都是迭代器,__iter__
返回迭代器自身,__next__
返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是如何实现的这并不重要。
迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。
(1)迭代器的四大特性
1.跌代集合,字符串,有序依次---------即有可迭代对象
输出:<listiterator object at 0x00BB62F0>
print(it.next()) #输出:0
print(next(it)) #输出:1
(3) python中in后面自动就会生成迭代器对象
for idx, ele in enumerate(lst):
print idx, ele
二、生成器
生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()
和__next__()
方法了,只需要一个yiled
关键字。 生成器一定是迭代器(反之不成立),因此任何生成器也是以一种懒加载的模式生成值。
特性:
(1)生成器的基本代码
def get_0_1_2():
yield 0
yield 1
yield 2
print( get_0_1_2)
输出:<function get_0_1_2 at 0x00B2CB70>
(2)调用生成器函数将返回一个生成器:
generator = get_0_1_2()
print( generato)
输出:<generator object get_0_1_2 at 0x00B1C7D8>
print(generator.next()) 输出:0
print(generator.next()) 输出:1
print(generator.next()) 输出:2
三、闭包
定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)
闭包从表现形式上解释为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。
#含有内部函数--闭包
def FunX(x):
print("开始")
def FunY(y):
print("计算")
return x*y
return FunY
a=FunX(3)#返回的时内部函数FunY
b=a(5)
print(b)
输出:15
FunY在FunX函数的代码块中定义。我们称FunY是FunX的内部函数。
在FunY的局部作用域中可以直接访问FunX局部作用域中定义的变量。
简单的说,这种内部函数可以使用外部函数变量的行为,就叫闭包。
四、装饰器
Python将一切视为 objec t的子类,即一切都是对象,因此函数可以像变量一样被指向和传递。
def diguo():
print("地锅50")
return 50
def doupi(fn):
def jia():
print("豆皮10")
return fn()+10
return jia
def xiang(fnn):
def jia():
print("香菜")
return fnn()+5
return jia
aa=doupi(xiang(diguo))
print(aa())
下一篇博客将详细讲解闭包和装饰器。
以上是关于Python中的迭代器和生成器,以及装饰的主要内容,如果未能解决你的问题,请参考以下文章