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
    迭代器
    

    
    
    
    
    
  • 相关阅读:
    hadoop无法启动常见原因
    mahout版本兼容问题
    递归打印字符串
    斐波那契数列
    int('x', base)中的base参数
    打印的特殊符号
    位置参数,默认参数,非关键字可变长参数,关键字可变长参数
    try...except包含try...finally方法
    7.9 未解答
    对集合应用符号 | & ^
  • 原文地址:https://www.cnblogs.com/-jov/p/13176914.html
Copyright © 2011-2022 走看看