python学习笔记Day.6-----------迭代器、生成器和闭包

迭代器
1、在定义一个类时添加一个__ iter__函数来使它成为一个迭代器,作为一个迭代器,它就可以使用next()方法来逐步输出类中包含的数据
2、通过iter()函数来使一个可迭代数据类型变成一个迭代器,例如:

li = [11, 22, 33, 44, 55]

# 通过iter() 取得可迭代对象的迭代器
iterator = iter(li)

# 通过next()函数取得iterator迭代器指向的下一个值
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
#output:
11
22
33
44
55

生成器
要创建一个生成器,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( )
G=(x*2 for x in range(6))
generator非常强大。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以用函数来实现。 函数中含有yield就是一个生成器,yield所在位置就是函数中断的位置,用send或者next方法来激活生成器函数,即从中断处继续执行。

# 创建一个简单生成器,通过 for来遍历
G=(x*2 for x in range(6))
print("通过for 迭代的结果:")
for num in G:
    print(num)
 #output:
 0
2
4
6
8
10

闭包:
由于考虑到编程的封闭性和模块化,采用闭包对函数进行处理,即可以隐藏函数源代码,又可以将不必要的变量从全局转入局部。
所谓闭包,就是指在一个函数中定义了一个另外一个函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包。

def function():
    lunch = 'lunch'
    def eat():
        print('eat{}'.format(lunch))
    return eat

gen = function()
gen()

简单来说就是将function()的return结果 eat赋值给gen然后gen就获得了内部函数eat()的内存地址,就能通过运行gen()来运行eat()而且在function()环境下运行

装饰器:
在我看来就是闭包的一种运用,为了在不修改原有函数功能和数据的前提下为函数添加新的功能,在函数外嵌套一个新的函数,将原函数需要的参数传进去,就形成了一个装饰器

# 装饰器固定格式
def wrapper(func):
    def inner(*args, **kwargs):
        # 在被装饰函数前执行的
        ret = func(*args, **kwargs)
        # 在被装饰函数后执行的
        return ret
    return inner
    
# 被装饰函数
@wrapper  # 语法糖
def function(*args, **kwargs):
    # 函数主体
    return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值