欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python裝飾器使用方法實例

 更新時間:2013年11月21日 14:59:30   作者:  
這篇文章主要介紹了python裝飾器的使用方法,大家參考使用

什么是python的裝飾器?

網(wǎng)絡(luò)上的定義:
裝飾器就是一函數(shù),用來包裝函數(shù)的函數(shù),用來修飾原函數(shù),將其重新賦值給原來的標(biāo)識符,并永久的喪失原函數(shù)的引用。

最能說明裝飾器的例子如下:

復(fù)制代碼 代碼如下:

#-*- coding: UTF-8 -*-
import time

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

# 定義一個計時器,傳入一個,并返回另一個附加了計時功能的方法
def timeit(func):

    # 定義一個內(nèi)嵌的包裝函數(shù),給傳入的函數(shù)加上計時功能的包裝
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start

    # 將包裝后的函數(shù)返回
    return wrapper

foo = timeit(foo)
foo()

python中提供了一個@符號的語法糖,用來簡化上面的代碼,他們的作用一樣

復(fù)制代碼 代碼如下:

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段的代碼是一樣的,等價的。

內(nèi)置的3個裝飾器,他們分別是staticmethod,classmethod,property,他們的作用是分別把類中定義的方法變成靜態(tài)方法,類方法和屬性,如下:

復(fù)制代碼 代碼如下:

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

裝飾器的嵌套:
就一個規(guī)律:嵌套的順序和代碼的順序是相反的。
也是來看一個例子:

復(fù)制代碼 代碼如下:

#!/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()

返回的結(jié)果是:
<b><i>hello world</i></b>
為什么是這個結(jié)果呢?
1.首先hello函數(shù)經(jīng)過makeitalic 函數(shù)的裝飾,變成了這個結(jié)果<i>hello world</i>
2.然后再經(jīng)過makebold函數(shù)的裝飾,變成了<b><i>hello world</i></b>,這個理解起來很簡單。

相關(guān)文章

  • python中pandas nlargest()的詳細(xì)用法小結(jié)

    python中pandas nlargest()的詳細(xì)用法小結(jié)

    df.nlargest()是一個DataFrame的方法,用于返回DataFrame中最大的n個值所在的行,通過調(diào)用nlargest()方法,我們返回了分?jǐn)?shù)最高的三個行,并按照降序排列,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • PyQt5 pyqt多線程操作入門

    PyQt5 pyqt多線程操作入門

    本篇文章主要介紹了PyQt5 pyqt多線程操作入門,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Python Dict找出value大于某值或key大于某值的所有項方式

    Python Dict找出value大于某值或key大于某值的所有項方式

    這篇文章主要介紹了Python Dict找出value大于某值或key大于某值的所有項方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 基于Python編寫一個B站全自動抽獎的小程序

    基于Python編寫一個B站全自動抽獎的小程序

    本文將利用Python編寫一個B站全自動抽獎的小程序,可以實時監(jiān)控自己關(guān)注的UP主,如果關(guān)注的UP主中有人發(fā)布了抽獎的動態(tài),就自動參與這個抽獎。這樣就能不錯過任何一個可以暴富的機會了。需要的可以參考一下
    2022-03-03
  • 關(guān)于Python數(shù)據(jù)結(jié)構(gòu)中字典的心得

    關(guān)于Python數(shù)據(jù)結(jié)構(gòu)中字典的心得

    給大家詳細(xì)簡介了Python數(shù)據(jù)結(jié)構(gòu)中字典的方法和使用心得,學(xué)習(xí)一下吧 ,有助于你更好的理解Python數(shù)據(jù)結(jié)構(gòu)。
    2017-12-12
  • Python中的標(biāo)簽編碼和獨熱編碼示例詳解

    Python中的標(biāo)簽編碼和獨熱編碼示例詳解

    標(biāo)簽編碼是一種用于將分類列轉(zhuǎn)換為數(shù)值列的技術(shù),以便它們可以通過僅采用數(shù)值數(shù)據(jù)的機器學(xué)習(xí)模型進(jìn)行擬合,這篇文章主要介紹了Python中的標(biāo)簽編碼和獨熱編碼,需要的朋友可以參考下
    2023-07-07
  • python簡單構(gòu)建可用IP代理池

    python簡單構(gòu)建可用IP代理池

    這篇文章主要介紹了python構(gòu)建簡單可以代理池,實現(xiàn)過程匹配ip:port的正則表達(dá)式、匹配出所有的ip與端口,放入列表、判斷爬取的代理ip是否可用、使用代理ip訪問指定網(wǎng)站,具體實現(xiàn)需要的小伙伴可以參考下面文章內(nèi)容
    2022-02-02
  • Python的Flask框架的簡介和安裝方法

    Python的Flask框架的簡介和安裝方法

    這篇文章主要介紹了Python的Flask框架的簡介和安裝方法,Flask是一款高人氣的非常簡潔的web開發(fā)框架,需要的朋友可以參考下
    2015-11-11
  • python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析

    python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析

    這篇文章主要介紹了python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析,需要的朋友可以參考下
    2014-04-04
  • 關(guān)于keras中卷積層Conv2D的學(xué)習(xí)記錄

    關(guān)于keras中卷積層Conv2D的學(xué)習(xí)記錄

    這篇文章主要介紹了關(guān)于keras中卷積層Conv2D的學(xué)習(xí)記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論