python装饰器用法入门教程

发布时间:2020-01-12编辑:脚本学堂
本文介绍了python装饰器的用法,python装饰器入门实例教程,python内置装饰器的用法,以及装饰器嵌套的例子,需要的朋友参考下。

python编程中有关python装饰器的使用方法

什么是python装饰器?

定义:
装饰器就是一函数,用来包装函数的函数,用来修饰原函数,将其重新赋值给原来的标识符,并永久的丧失原函数的引用。

例子,python装饰器的例子:
 

复制代码 代码示例:

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import time

def foo():
    print 'in foo()'

# 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法
def timeit(func):

    # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start

    # 将包装后的函数返回
    return wrapper

foo = timeit(foo)
foo()

另外,python中提供了一个@符号的语法糖,用来简化以上代码,作用一样。

例如:
 

复制代码 代码示例:

#!/usr/bin/env python

import time

def timeit(func):
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start
    return wrapper

@timeit
def foo():
    print 'in foo()'

foo()
 

这2段的代码是一样的,等价的。
内置的3个装饰器,分别是staticmethod,classmethod,property,作用是分别把类中定义的方法变成静态方法,类方法和属性,如下:
 

复制代码 代码示例:

class Rabbit(object):

    def __init__(self, name):
        self._name = name

    @staticmethod
    def newRabbit(name):
        return Rabbit(name)

    @classmethod
    def newRabbit2(cls):
        return Rabbit('')

    @property
    def name(self):
        return self._name

装饰器的嵌套:
就一个规律:嵌套的顺序和代码的顺序是相反的。

例子:
 

复制代码 代码示例:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
@makebold
@makeitalic
def hello():
    return "hello world"
print hello()
 

返回结果:
<b><i>hello world</i></b>

分析:
1、首先,hello函数经过makeitalic 函数的装饰,变成了这个结果<i>hello world</i>
2、然后,再经过makebold函数的装饰,变成了<b><i>hello world</i></b>。

以上就是python装饰器的用法,几个python装饰器的例子,希望对大家有所帮助。

>>> 查看更多python装饰器的实例教程