python三大利器,迭代器、生成器、装饰器

本文介绍了Python中的迭代器、生成器和装饰器的概念及其用法。迭代器用于遍历可迭代对象,如列表;生成器则能实时生成结果,节省内存;装饰器则提供了一种不修改原有函数代码而扩展其功能的方式,可用于接口改写或增加额外操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器

from collections.abc import Iterable

gen = [1, 2, 3]
it = iter(gen)  # 拿到迭代器
print(isinstance(gen, Iterable))  # 查看是否是可迭代对象
print(next(it))  # 迭代值
print(next(it))
print(next(it))

# 结果
True
1
2
3

生成器

生成器能够实时的返回结果,不用像普通函数执行那样,执行完才同一输出结果

# li = []


def builder():  # 当有yield关键字在函数中,该函数为生成器函数
    for i in range(10000000000):
        yield i
    #     li.append(i)
    # return li


day = builder()  # 返回的是生成器对象,因为函数中带有yield关键字
print(day)

for i in day:
    print(i)

装饰器

把需要改写的函数传进去,把改写好的函数传出来

  • 如此改写,不动原来函数,但需要修改接口
    def wrapper():
        get_print()
        return print("在已完成函数中,改写的函数")
    
    
    def get_print():
        return print("已完成的函数")
    
    
    # get_print() # 原来的接口
    
    
    wrapper()  # 修改的接口
    
    # 结果
    已完成的函数
    在已完成函数中,改写的函数

  • 下面这样改写,不动原来函数,也不需要修改接口,但不够简便
    def sayLocal(func):
        def wrapper(*args, **kwargs):  # *args 为可变参数
            func(*args, **kwargs)  # **kwargs 为可变关键字参数,如 k=2,b=3等{k:2, b:3}
            return print("在已完成函数中,改写的函数")
    
        return wrapper
    
    
    def get_print():
        return print("已完成的函数")
    
    
    get_print = sayLocal(get_print)  # 可用语法糖 @sayLocal
    
    get_print()
    
    # 结果
    已完成的函数

  • 下面这样改写,不动原来函数,也不需要修改接口,也简便,完美

    @wraps(func) 返回被装饰的函数属性

    def sayLocal(func):
        @wraps(func) # 返回被装饰的函数属性
        def wrapper(*args, **kwargs):  # *args 为可变参数
            func(*args, **kwargs)  # **kwargs 为可变关键字参数,如 k=2,b=3等{k:2, b:3}
            return print("在已完成函数中,改写的函数")
    
        return wrapper
    
    # 装饰器
    @sayLocal
    def get_print():
        return print("已完成的函数")
    
    
    get_print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值