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.无法预测迭代器值的个数

原文地址:https://www.cnblogs.com/luck-L/p/9173003.html