美文网首页
python基础(@)

python基础(@)

作者: 永远学习中 | 来源:发表于2017-09-26 01:26 被阅读0次

    @说到底就是一个装饰模式,使用装饰的结果替代被装饰的对象。

    def a(fn):
        print('a')
    
        def d(st):
            print(st+ 'd')
            return fn(st)
        return d
    
    def b(fn):
        print('b')
        return fn
    
    @a
    @b
    def c(st):
        print(st)
    
    print("**********")
    c('f')
    c('c')
    print("**********")
    

    首先需要弄明白的是函数的传递关系,装饰器是对函数进行装饰,传递的参数就是函数。所有

    @a
    @b
    def c(st):
        print(st)
    

    等价于

    c= a(b(c))
    

    而且是立即执行的那种。后面调用c("f“),实际就是调用d这个函数,st为传入的参数。

    对于不定长的参数而言。

    * args和**kwargs

    当函数的参数不确定时,可以使用* args 和** kwargs,* args 没有key值,** kwargs有key值。这两个是python中的可变参数。* args表示任何多个无名参数,它是一个tuple;** kwargs表示关键字参数,它是一个dict。并且同时使用* args和** kwargs时,必须* args参数列要在** kwargs前。例如:foo(name,age,date=newdate,birthday=date)

    相关文章

      网友评论

          本文标题:python基础(@)

          本文链接:https://www.haomeiwen.com/subject/ykmjextx.html