zoukankan      html  css  js  c++  java
  • day14

                                                                                                            今日所学内容

    带参装饰器

    在装饰器中有一种情况是,我们需要传一个参数,同这个参数,在装饰器中实现新的功能

    最初的装饰器是不能瞒足的,因为最初的这个装饰器传的参数是给原函数和新的函数传参的功能

    所以瞒足不了需求.所以就有了一个新的装饰器,那就是带参装饰器

    def wrap(info):
        def outer(func):
            # info = 0
            def inner(*args, **kwargs):
                print('新:拓展的新功能,可能也需要外界的参数%s' % info)
                res = func(*args, **kwargs)
                return res
            return inner
        return outer
    
    @wrap('外部参数')
    def fn(): pass

    这里的@wrap("传入的参数")  ----> 解释就是调用这个函数,并且返回一个装饰器,并且还把需要的参数传入到了函数中去

    可迭代对象 和迭代对象

    可迭代对象是拥有__iter__()方法返回一个迭代对象使用__next__()方法来取值

    迭代的对象是只有__next__()这个方法,也通过这个方法来获取值

    大部分容器都是可迭代的,但是还有其他一些对象也可以迭代,例如,文件对象以及管道对象等等,

    容器一般来说存储的元素是有限的,同样的,可迭代对象也可以用来表示一个包含有限元素的数据结构。

    需要注意的是迭代器调用__next__()这个方法获取值的时候是一行一行获取的,所以就会存在一种情况,就是

    总会又一次获取结束,这个时候,就会报错,

    像上面的情况 ,我们就通过报异常来处理,如果没有值可取了,就报异常

    ls = [3, 1, 2, 3, 5]
    iterator = ls.__iter__()
    while True:
        try:
            print(iterator.__next__())
        except StopIteration:
            # print('取空了')
            break

    然而在for中我们就优化了这种,因为在for中当取值抛异常,自动处理StopIteration异常结束取值循环

    枚举对象

    # 给可迭代器对象及迭代器对象添加迭代索引
    s = 'abc'
    for v in enumerate(s):
    print(v) # (0 'a') | (1 'b') | (2 'c')

    生成器

    生成器:自定义的迭代器对象
    就是用函数语法来声明生成器,用yield关键字取代return关键字来返回值,参数没有多少变化

    总结:有yield关键字的函数,函数名() 不是调用函数,而是生成得到 生成器对象,生成器对象就是迭代器对象,可以通过 __next__() 进行取值

    def jiecheng_num(num):
        ji = 1
        for i in range(1, num + 1):
            ji *= i
            yield ji
        # ...
    
    obj = jiecheng_num(3)
    print(obj.__next__())
    print(obj.__next__())
    print(obj.__next__())
    print(obj.__next__())  # 有异常了
    
    
    for v in jiecheng_num(5):
        print(v)  # 会自动处理异常停止
  • 相关阅读:
    [SDOI2008]Sue的小球
    【洛谷P2611】小蓝的好友
    【YbtOJ#20051】简单游走
    【洛谷P3338】力
    【洛谷P3803】【模板】多项式乘法(FFT)
    【YbtOJ#10053】合影队形
    【YbtOJ#20056】树上取模
    【洛谷P1919】【模板】A*B Problem升级版
    初赛练习总结
    【洛谷P3723】礼物
  • 原文地址:https://www.cnblogs.com/WBaiC1/p/10790664.html
Copyright © 2011-2022 走看看