python基础(@)

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

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 3,参考 A Byte of Python v1.92(for Python 3.0) 以...
    yuhuan121阅读 8,494评论 1 6
  • Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要本文详细介绍了函数的各种形参类型...
    理查德成阅读 3,332评论 0 2
  • 函数介绍 如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织...
    Mr丶sorrow阅读 2,271评论 0 0
  • 目录最重要的工具PIP, 以及常用的网站,IDE推荐 基本概念 函数 进阶概念:装饰器,迭代器,列表推导式,匿名函...
    六合鱼阅读 1,761评论 0 0
  • 在不断的猛烈追求下,女孩坚强的心终于还是软了下来,曾以为坚不可摧,不会随便被一个男人所轻易打动,但是他温暖的大掌,...
    飞雪雁阅读 721评论 0 1