国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python裝飾器使用方法實例

2020-02-23 04:56:55
字體:
來源:轉載
供稿:網友

什么是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中提供了一個@符號的語法糖,用來簡化上面的代碼,他們的作用一樣

代碼如下:
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():

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弥渡县| 苗栗市| 罗定市| 正安县| 旺苍县| 黎平县| 温州市| 阳新县| 沧州市| 砀山县| 正镶白旗| 肥城市| 麻江县| 巴彦县| 鸡东县| 赞皇县| 子长县| 阜新市| 泾川县| 石柱| 高邮市| 社旗县| 赤壁市| 临海市| 广丰县| 河南省| 肇庆市| 咸丰县| 西青区| 江北区| 当涂县| 库车县| 益阳市| 古交市| 绩溪县| 安岳县| 勃利县| 阿尔山市| 乌审旗| 长海县| 仪陇县|