Python基础知识(迭代器、生成器与装饰器)

一、迭代器

  迭代器:可以理解为一个容器,循环的时候,每次从容器中取出一个元素,直到元素被取完为止。

# 1)for循环,本质上是迭代器的应用。
for i in range(1,10):
    print(i,end="")


>>123456789
#定义一个类方法:在类中,实现两个方法__iter__与__next__
#其中__iter__方法需要返回对象本身,它是for循环使用迭代器的要求;
#__next__方法用于返回容器中下一个元素,当容器中的数据取完时,需要引发StopIteration.

#2):自定义迭代器,通过传入最小值最大值,返回该范围所有数值的3次方;将返回的值,存入num_list列表中。

class Numm():
    def __init__(self,minn,maxx):
        self.minn=minn
        self.maxx=maxx

    def __iter__(self):
        return self    #返回对象本身

    def __next__(self):
        #返回这个范围内所有的3次方
        num=self.minn

        if self.minn<=self.maxx:
            self.minn+=1
            return num**3
        else:
            raise StopIteration

num_list=[]
for i in Numm(1,5):
    print(i)


>>1
>>8
>>27
>>64
>>125

二、生成器

  生成器:如果一个列表中,存在海量的数据,如果仅仅只是想访问其中的某几个元素,那么这样的操作会特别耗内存;若一个函数中如果包含yield关键字,那么这个函数就不再是一个普通函数,而是一个生成器(generator)对象。生成器的特点:

  1.操作海量数据,节约内存空间。

  2.生成器是一个返回迭代器的函数,只能用于迭代操作。

  3.在调节生成器运行的过程中,每次遇到yield函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时,从当前位置继续运行。

# 1)创建一个生成器,传入最大最小值,执行next()方法。
def gene(minn,maxx):
    while minn<maxx:
        yield minn
        minn+=1

my_gene=gene(1,5)
print(next(my_gene))
print(next(my_gene))
print(next(my_gene))


>>1
>>2
>>3
# 2)【yield 与 return】的区别
#  return后,会跳出当前函数。yield 不会跳出当前函数。
#  yield保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行。

def test():
    
    return 1
    return 2

c1=test()
print(c1)

def gene():
    yield 1
    yield 2

genetest=gene()
c2=next(genetest)
c3=next(genetest)
print(c2,c3)


>>1
>>1 2

三、装饰器

  装饰器:装饰器是一种增加函数或类功能的简单方法,它可以快速的给不同的函数或类传入相同的功能。调用被装饰的函数,与之前的调用过程没有任何区别。

# 示例语法:
# def decorate(func):                         #定义装饰器函数,参数为func,代表被装饰的函数
#     def wrapper(*agrs,**kwargs):            #新定义一个包装函数,用于返回
#         func(*agrs,**kwargs)                #调用被装饰的函数,引用外部函数
#     return wrapper                          #返回包装函数

def decorate(func):
    def wrapper(*agrs,**kwargs):
        print("执行开始")
        func(*agrs,**kwargs)
        print("执行结束")
    return wrapper

@decorate
def func():
    print("hello word")

print(func())


>>执行开始
>>hello word
>>执行结束
>>None
上一篇:Python生成器


下一篇:python -生成器