zoukankan      html  css  js  c++  java
  • 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安装pip
    MySQL免安装版
    git仓库删除所有提交历史记录,成为一个干净的新仓库
    git地址带上密码,不用每次提交都输入密码
    virtualenv
    mac卸载python
    换源
    屏幕旋转,ViewController触发事件
    ViewController启动加载过程
    使用 symbolicatecrash转化crash日志
  • 原文地址:https://www.cnblogs.com/luck-L/p/9173003.html
Copyright © 2011-2022 走看看