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
迭代器
![](https://img2020.cnblogs.com/blog/1632739/202006/1632739-20200622144230274-594207984.png)

猜你喜欢

转载自www.cnblogs.com/-jov/p/13176914.html