zoukankan      html  css  js  c++  java
  • python----函数-----有参装饰器----迭代器

    有参装饰器
          相对于无参装饰器,在无参装饰器的基础上在包一层 闭包函数,无参装饰器的模板是不可以修改的 否则会改变函数的调用方式与传参方式 为了解决除了不修改之外的方法,必须在包一层
       @的使用规则
          @加函数名 不带括号 ,执行方式是 将@下面的定义函数名放到装饰器内增加扩展功能,在重新命名的过程。
          @加函数名加括号跟着参数形如@deco(mode='r') 执行方式是 先执行deco(mode='r')得到返回值 再将返回值放在@后面  在进行与无参装饰器一样的步骤
              有参装饰器 是将一个分支条件的扩展装饰给函数,比如 认证的方式有好几种 直接密码认证 或者通过数据库认证  还可以是其他认证方式 
        定义有参与无参装饰器
              只是加一些一般扩展 不需要额外参数的 就定义为无参装饰器
              需要参数作为条件分支的可以定义为有参装饰器
    def o(str_='a'):  #带默认值的有参装饰器  将值传递给分支结构
        def outter(func):
            def wrapper(*args, **kwargs):
                if str_ == 'a':
                    inp_name = input('please input your name:').strip()
                    inp_pwd = input('please input your pwd:').strip()
                    with open('use.db', 'rt', encoding='utf-8') as f:
                        for line in f:
                            name_db, pwd_db = line.strip().split(':')
                            if inp_name == name_db and inp_pwd == pwd_db:
                                print('login successful')
                                res = func(*args, **kwargs)
                                return res
                        else:
                            print('print error')
                elif str_ == 'b':
                    print('走b的路线')
            return wrapper
        return outter
    
    @o()
    def f():
        print('hahhhahaha')
        return 12
    迭代器
    

    
    
    
    
    
  • 相关阅读:
    1.1 git和github -1 介绍
    seajs使用
    seajs使用-1 解决冲突和依赖
    6. 菜单切换
    5. 背景半透明 元素不透明(兼容所有浏览器)
    4. 父元素如何包含子元素
    3. js 多维数组转为一维数组
    2. 伪数组转为数组 Array.prototype.slice.call(arguments)
    3. 伪元素清除最后一个border的边框
    2. 详解 CSS 属性
  • 原文地址:https://www.cnblogs.com/-jov/p/13176914.html
Copyright © 2011-2022 走看看