zoukankan      html  css  js  c++  java
  • 叠加装饰器 迭代器

    叠加装饰器:

    ​ 在同一个被装饰对象中,添加多个装饰器,并执行

    @装饰1

    @装饰2

    @装饰3

    def 被装饰对象():

    ​ pass

    注意:装饰器在调用被装饰对象是才会添加的功能

    叠加装饰器:

    ​ -- 装饰器的顺序:由下到上

    ​ --执行的顺序:由下到上

    注意:无论inner中出现任何判断,最后都要返回“调用后的被装饰对象” func(*args, **kwargs)

    有参装饰器:

    ​ 本质上是在无参装饰器上套了一个外层函数

    ​ 无参装饰器可以引用外层函数的名字

    应用:

    	用户权限的认证
    

    迭代器

    迭代器:

    ​ 迭代取值的工具

    迭代:

    ​ 迭代指的是重复迭代,每一次迭代都是基于上一次的结果而产生

    迭代器:

    ​ 迭代器指的是迭代取值的工具,它可以迭代取值

    • 如果想要知道python中迭代器是什么,首先需要先知道什么是可迭代对象?

    可迭代对象:

    ​ 所有的序列类型:str(字符串)、list(列表)、tuple(元祖)、dict(字典)、set(集合)、f(文件)

    ​ 凡是内部有 __ iter__ () 方法的都是可迭代对象

    可迭代对象:

    通过可迭代对象 __ iter __ (),得到的返回值就是“迭代器对象”

    迭代器是迭代取值的工具,作用是迭代取值

    获取迭代器:

    list1 = [1,2,3]
    
    #调用__iter _ ()会得到一个返回值,该返回值就是一个迭代器对象
    

    ​ iter_list = list1.__iter _()

    ---如何迭代取值:

    迭代器对象 __ next__ () 每执行一次,都会从迭代器对象中取出一个值

    注意:取到最后一个值后,若值没有,则会报错

    while True
    	try:
            print(iter_list._next_())
        except StopIteration:
            break
    

    for 循环的原理:

    in : 会将可迭代对象自动调用_ iter _ ()变成迭代器对象

    for i in 可迭代对象:

    ​ #会自动帮你调用_ next_

    print(i) : for循环内部会有一个捕获异常机制,一旦遇到异常就会停止取值

    迭代器的优缺点:

    ​ 优点:提供一种不依赖索引取值的方式

    ​ 节省内存空间

    ​ 缺点:指定取值麻烦,每次取值都要从第一个开始查找

    ​ 不能通过len计算长度

  • 相关阅读:
    2017 Multi-University Training Contest
    ACM 竞赛高校联盟 练习赛 第一场
    hdu 6194 string string string(后缀数组)
    Codeforces Round #433 (Div. 1) D. Michael and Charging Stations(dp)
    Codeforces Round #433 (Div. 2) E. Boredom(主席树)
    Codeforces Round #433 (Div. 2) C. Planning(贪心)
    Codeforces Round #433(Div. 2) D. Jury Meeting(贪心)
    hdu 6191 Query on A Tree(dfs序+可持久化字典树)
    hdu 6183 Color it(线段树)
    poj 2464 Brownie Points II(扫描线)
  • 原文地址:https://www.cnblogs.com/127-2933/p/11867940.html
Copyright © 2011-2022 走看看