python装饰器事例

python装饰器事例

输出0-99的所有数

def decorator(fn):
    def wrapper():
        return fn()      #与下面的对比,格式实际上是一样的。这是无参,下面是有参。
    return wrapper

@decorator
def print_4_list():
    for i in range(100):
        yield i

if __name__=='__main__':
    for x in print_4_list():
        print (x)
        assert isinstance(x,int)

0-99,输出4个为一组

def decorator(func):
    def wrapper(*args, **kw):
        i = 0
        for j in func(*args, **kw):
            if (j + 1) % 4 == 0:
                yield list(func(*args, **kw))[i:j+1]
                i = j + 1
    return wrapper
@decorator
def print_4_list():
    for i in range(100):
        yield i
if __name__ == '__main__':
    for x in print_4_list():
        print(x)
        assert isinstance(x, list)

(1)def wrapper(*args, **kw):一般的装饰器都可以这样写,我们可以认为装饰器在调用函数前先调用了一个装饰器函数。要对变量操作的代码就可以写在这个装饰器函数里。
(2)for j in func(*args, **kw):这个就是装饰器调用这个装饰器函数作为范围进行对变量的基本运算。
(3)yield list(func(*args, **kw))[i:j+1]:yield相当于return;func就是要装饰的函数;list就是列表,把func函数返回值转为列表类型;[i:j+1]就是列表切片。因为是从0开始的,所以截止到j+1;*args是可变参数,可以传入多个参数,把多个参数变成一个元组,传入函数中;**kw是关键字参数,调用参数是可以不为他传值;*args,**kw可以概括所有函数的参数情况。
(4)if name == ‘main’:就是主函数
print(x):x就已经是装饰器整理好的list了,每个list里4个元素
assert isinstance(x, list):assert语句是插入调试断点到程序的一种便捷方式;isinstance(x, list)就是检测x的类型是不是list类型。返回true和false。

不用装饰器

a=[i for i in range(100)]
n=4
print([a[i:i + n] for i in range(0, len(a), n)])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值