码迷,mamicode.com
首页 > 编程语言 > 详细

PythonMan(七)

时间:2016-07-30 15:05:40      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

Hello Python :)

细节:
  def fun():
    return "Hello"

  对于这个函数,fun代表这个函数,fun()代表执行这个函数,既然fun代表这个函数名,那fun也可以作为参数,传入另外一个函数。例子:

  技术分享


装饰器:
  引言:在AirTech公司中,底层的Coder写的功能需要变更,那么有两种出路:1上层的业务部门Coder更改,这个代价太大。2由底层的Coder进行源码更改。一般来说会是由底层Coder做这件事,那么如果要给100个方法添加一个验证功能,那么One by One的修改方式太Low了,所以,装饰器应运而生。用来装饰函数或类,它可以让被装饰者在执行前或执行后做出某些操作,从而遵循了软件设计的原则——开放封闭原则(对内封闭,对外开放)。

  例子:
    def outer(fun):
      def inner():
        print("源码执行前")
        r = fun()
        print("源码执行后")
        return r
      return inner

    @outer
    def f1():
      print("I am original code!")

    如上所示,outer是装饰器函数,f1是源码中想要修改的函数,现在这个f1函数已经被改装了。调用f1函数,就会输出新内容。OK,这个装饰器做了如下事情:
      1)执行outer函数,并将其下面的函数名当做参数
      2)将outer的返回值重新赋值给f1,即重新定义f1函数


    源函数带参数:
      def outer(fun):
        def inner(a1,a2):
          print("源码执行前")
          r = fun(a1,a2)
          print("源码执行后")
          return r
        return inner

      @outer
      def f1(a1,a2):
        print("I am original code!")

    源函数带N个参数:写一个装饰器,应用不同参数的源函数
      def outer(fun):
        def inner(*args,**kargs):
          print("源码执行前")
          r = fun(*args,**kargs)
          print("源码执行后")
          return r
        return inner

      @outer
      def f1(a1,a2):
        print("I am original code!")

      @outer
      def f2(a3):
        print("f2")

      @outer
      def f3(a4,a5,a6):
        print("3个参数")

    多个装饰器修饰一个函数:
      @outer_1
      @outer_2
      def test():
        print("Hello")

PythonMan(七)

标签:

原文地址:http://www.cnblogs.com/AirStark/p/5720853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!