修饰符在python函数中的用法详细解释

来源:互联网 发布:淘宝首页分类导航代码 编辑:程序博客网 时间:2024/06/06 02:39

python修饰符是实现一个函数嵌套的功能,比较以下两个函数

# -*- coding:utf-8 -*-def a(fn):    print 'a'    def d(st):        print "--------------------------------"        print st + 'd'#st在这个函数中的生命周期已经结束    return fndef b(fn):    print 'b'    return fn@a@bdef c(st):    print "********************************"    print st#这里是执行b、a,同时定义c#下面是连续执行c函数三次,无视修饰符。print "test"c('c')

输出结果是:

b
a
test
********************************
c

# -*- coding:utf-8 -*-def a(fn):    print 'a'    def d(st):        print "--------------------------------"        print st + 'd'#st在这个函数中的生命周期已经结束    return ddef b(fn):    print 'b'    return fn@a@bdef c(st):    print "********************************"    print st#这里是执行b、a,同时定义c#下面是连续执行c函数三次,无视修饰符。print "test"c('c')


输出结果是:

b
a
test
--------------------------------
cd



以上执行结果的区别是因为返回的函数不一样,返回的函数不一样也就是说执行的函数不一样,所以最终结果也会不一样。

注意几个规律:

返回一个函数就是在执行函数

@后面的调用@下面的

把函数作为参数传递时,整个函数可以用换元的思想去看待,就很简单了

另外注意:

尽管只有一次c('c')

但是在调用之前,b函数和a函数已经被先后执行,也就是说修饰符所在的函数c,两个修饰符就有执行b函数和a函数的效果。

输出“test”作为一个醒目的标记。

最后在调用c('c')时,输出结果到底是否是c函数的输出结果,取决于修饰符@a最后是否会返回c函数,

如果@a最后返回c函数,那么输出结果就是c函数的输出结果,

如果@a最后不返回c函数,而是返回d函数,那么尽管调用了c函数,由于修饰符的存在,输出结果却是d函数的输出结果。


也就是说,对于存在修饰符的函数c,对c调用的结果,取决于修饰符最终是否会返回该函数,如果返回c函数,则执行c,(上面第一份代码)

如果不返回c,返回d,则屏蔽c,执行d(上面第二份代码)



原创粉丝点击