python学习第十三天:带参数装饰器和迭代器

Posted luck_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习第十三天:带参数装饰器和迭代器相关的知识,希望对你有一定的参考价值。

带参数的装饰器:就是在原装饰器外再包一层函数

def auth(driver=‘file‘):
    def auth2(func):
        def wrapper(*args,**kwargs):
            name=input("user: ")
            pwd=input("pwd: ")

            if driver == ‘file‘:
                if name == ‘egon‘ and pwd == ‘123‘:
                    print(‘login successful‘)
                    res=func(*args,**kwargs)
                    return res
            elif driver == ‘ldap‘:
                print(‘ldap‘)
        return wrapper
    return auth2

@auth(driver=‘file‘) def foo(name): print(name) foo(‘egon‘)

  

迭代器:迭代取值的工具

1.是迭代器?

         迭代是一个重复的过程,每一次重复都是基于上一个结果而来的。

         注:单纯的重复并不是迭代

 

2.为什么要有迭代器?

         基于索引的迭代取值方式只适合用于列表、元组、字符串类型,而对于没有索引的字典、集合、文件,则不再适用。

         所以必须找到一种不依赖于索引取值的方式,这就是迭代器

         迭代器适用于可迭代对象

 

3.什么是可迭代对象?

         在python中但凡内置有__iter__方法的对象都是可迭代对象

         可迭代对象包含:字符串,列表,元组,字典,集合和文件

 

4.什么是迭代器对象?

         迭代器对象指的是内置有__iter__方法,又内置有__next__方法的对象

         执行可迭代对象的__iter__方法得到的就是内置的迭代器对象

         文件本身就是迭代器对象

         迭代器对象的__iter__方法得到的是迭代器本身,为了方便for循环

         迭代器对象的__next__方法得到的是下一个值

一旦迭代器取干净了,再继续取就会抛出StopIteration

 

5.for循环:

         For循环的本质是迭代器循环

         Info = [1,2,3,4]

         for k in info:

                  print(k)

         in后面跟的一定是可迭代对象,for循环的in会自动把可迭代对象转换为迭代器对象

 

 

总结:

         优点:1.提供了一种通用的,可以不依赖索引的迭代取值方式

                    2.迭代器对象更加节省空间

         缺点:1.迭代器的取值不如索引和key灵活,只能一个个往后取

                    2.无法预测迭代器值的个数



以上是关于python学习第十三天:带参数装饰器和迭代器的主要内容,如果未能解决你的问题,请参考以下文章

第十三天 叠加多个装饰器 迭代器 生成器

python第十三天

2018.09.28python学习第十三天part2

学习python第十三天

python学习第十三章

Python 基础第十三天(迭代器,生成器)