python修饰器

看了一下flask,发现不知python的修饰器是啥

直接上代码:

代码1//

#coding:utf-8
import __main__

def dec(param):
    print(type(param))
    print(str(param))
    
    param("on dec")
    return param

@dec
def foo(str):
    print(str)
    
if(__name__ == '__main__'):
    foo("some str")

输出:

<type 'function'>
<function foo at 0x7fcd54ce6c08>
on dec
some str


可以看出,修饰器把函数foo作为参数传给了被修饰的函数dec。

注意,如果吧

if(__name__ == '__main__'):
    foo("some str")
这句去掉,则输出为:

<type 'function'>
<function foo at 0x7f38428b9c08>
on dec

可见修饰器不管函数有没执行,都会把foo函数传给dec,并执行dec函数


最后再看一段代码:

///代码2///

#coding:utf-8
import __main__

def bar(str):
    print("on bar")
    print (str)
    
    def otherFunc(param):
        print("on otherFunc")
        print(param)
        return param
    
    return otherFunc    


@bar("some")
def foo(str):
    print("on foo")
    print(str)

if(__name__ == '__main__'):
    foo("hihi")
 

输出结果:

on bar
some
on otherFunc
<function foo at 0x7f3b821c7c80>
on foo
hihi


执行过程为:

1。运行bar("some"),返回函数otherFunc,

2。对otherFunc进行修饰,函数foo作为参数传入otherFunc,返回foo

3。执行foo


有时候觉得python某些特性真的很奇怪


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值