python三大器(装饰器/生成器/迭代器)

python三大器(装饰器/生成器/迭代器)
1装饰器
1.1基本结构
def 外层函数(参数):
    def 内层函数(*args,**kwargs);
        return 参数(*args,**kwargs)
    return 内层函数
@外层函数
def index()
    pass    
#示例:
def func(arg):
    def inner():
        v = arg()
        return v 
    return inner 
@func
def index():
    print(123)
    return 666

print(index)
@func :执行func函数把下面色函数当做参数传递,相当于:func(index)
将外层函数的返回值(内层函数)重新赋值给下面的函数名index,index = func(index)
1.2装饰器基本应用
应用场景:想要为函数扩展功能时,使用装饰器

计算运行时间

时间模块:time.time()获取当前时间
time.sleep('秒数')睡眠
# 计算函数执行时间

def wrapper(func):
    def inner():
        start_time = time.time()
        v = func()
        end_time = time.time()
        print(end_time-start_time)
        return v
    return inner
@wrapper
def func1():
    time.sleep(2)
    print(123)
@wrapper
def func2():
    time.sleep(1)
    print(123)
func1()
1.3 带参数的装饰器
#普通装饰器基本格式
def wrapper(func):
    def inner():
        pass
        return func()
    return inner

def func():
    pass
func = wrapper(func)
func()
#带参数装饰器基本格式
def w(counter):
    def wrapper(func):
        def inner(*args,**keargs):
            lis = []
            for i in range(0,counter):
                a=func(*args,**keargs)
                lis.append(a)
            return lis
        return inner
    return wrapper

def func(*args,**keargs):
    return 8
#面试题
# 写一个带参数的装饰器,实现:参数是多少,被装饰的函数就要执行多少次,并返回最后一次执行的结果【面试题】
def xxx(counter):
    print('x函数')
    def wrapper(func):
        print('wrapper函数')
        def inner(*args,**kwargs):
            for i in range(counter):
                data = func(*args,**kwargs) # 执行原函数并获取返回值
            return data
        return inner
    return wrapper

@xxx(5)
def index():
    return 8

v = index()
print(v)
2生成器
函数中存在yield,那么该函数为生成器函数,调用生成器函数会返回一个生成器,生成器只有被for循环时,生成器函数内部的代码才会执行,每次驯化都会获取yield返回的值.
基本格式:
##生成器函数存在yield
def func(*args)
    *args=1
    yield 1
    yield 2   
func('a')
#函数内部代码不会执行,返回一个生成器对象
v = func('a')
#生成器是可以被for循环,一旦开始循环name函数内部代码就会开始执行.
for item in v:
    print(item)    #循环开始,函数运行,yield 返回值,停止第一次循环,再次循环时从上一次yield的位置开始运行
生成数字:
return 可以做终止命令,不会返回值
def func():
    count = 1
    while True:
        yield count
        count += 1
        
val = func()

for item in val:
    print(item)
3迭代器
3.1 迭代器
迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”

迭代器:帮助对某种对象(str/list/tuple类所创建的对象..)中的y元素一一获取.表象:具有__next__方法,每次迭代都返回一个值

列表转换成迭代器:
lis = iter([1,2,4,2])
lis= [1,2,4,2]._ _ iter __()
迭代器想要获取每个值就要反复调用:val = lis.__ next __()
直到报错Stopinteration取到最后一个元素
判断一个对象是否是迭代器:内部是否有__ next __方法.
v1 = [11,22,33,44]

# 列表转换成迭代器
v2 = iter(v1)
result1 = v2.__next__()
print(result1)
result2 = v2.__next__()
print(result2)
result3 = v2.__next__()
print(result3)
result4 = v2.__next__()
print(result4)
result5 = v2.__next__()
print(result5)
"""
# v1 = "alex"
# v2 = iter(v1)
# while True:
#     try:
#         val = v2.__next__()
#         print(val)
#     except Exception as e:
#         break
3.2 可迭代对象
具有__inter__方法的就是可迭代对象,并且返回一个迭代器,才成为可迭代对象

v1= [11,22,33,44]
result= v1.__iter__()
能被for循环的就是可迭代对象

小结
迭代器,对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个 __next__方法,用于以一个个获取数据。
可迭代对象,可以被for循环且此类对象中都有 __iter__方法且要返回一个迭代器(生成器)。
生成器,函数内部有yield则就是生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。
生成器是特殊的迭代器(**)
分类: 小结, python基础
标签: python学习, 基础知识, 生成器, 装饰器, 迭代器
https://www.cnblogs.com/bigox/p/10738889.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值