python装饰器一
1、我们先来看看python中的普通函数,如下所示我们先定义一个函数 mydecorators:
def mydecorators(role): return 'decorators '+rol
print(mydecorators(role='people'))
详细如下图所示
2、我们还可以将函数赋值给一个变量方便调用,然后将原来的函数删除,如下在步骤一基础上:
def mydecorators(role): return 'decorators '+roleprint(mydecorators(role='people'))decorators=mydecorators(role='moon') 赋值给参数print(decorators) 新参数调用函数del mydecorators 删除函数print(mydecorators(role='people')) 调用删除函数
print(decorators)
如下图所示,可以看出 删除后在调用函数报错,如果你把print(mydecorators(role='people')) 这句注释了就没有报错了
3、接下来我们,在一个函数中定义一个子函数,如下所示我们通过例子来看看
我们首先定义一个带子函数的函数
def mydecorators(role): def people(): print 'function is people' 子方法一 def moon(): print 'function is moon' 子方法二 if role=='people': people() else: moon() return 'function is mydecorators'
如图所示
4、然后我们调用它,看看怎么运行的,如下所示:
print(mydecorators(role='people'))
观察输出:
function is people
function is mydecorators
我们发现 mydecorators 和people两个方法被调用了,我们在外层调用下 people 和moon方法试试,发现报错,如图三,由此可以知内部方法是没法被直接调用的
5、我们还可以对四步骤中的函数进行修改,让它只返回一个值,如下所示:
def mydecorators(role): def people(): return 'function is people' def moon(): return 'function is moon' if role=='people': return people else: return moon 可以看出通过条件判断该函数只有一个返回值
6、我们调用以上函数,我们会发现它只有一个返回值了,如下:
print(mydecorators(role='people'))print(mydecorators)print(mydecorators(role='moon'))
输出结果:
function is people
<function mydecorators at 0x0000000002C69908>
function is moon
7、细心的朋友会发现,输出的函数当没加参数时候就输出 该函数
如 print(mydecorators) 输出
<function mydecorators at 0x0000000002C69908>
这节我们先介绍函数的基础定义,下一节我们在接着介绍 python decorators