我終於弄懂了Python的裝飾器(三)

2021-10-07 22:18:40 字數 2567 閱讀 4493

此系列文件:

1. 我終於弄懂了python的裝飾器(一)

2. 我終於弄懂了python的裝飾器(二)

3. 我終於弄懂了python的裝飾器(三)

4. 我終於弄懂了python的裝飾器(四)

我可以使用裝飾器做什麼?

裝飾器看起來很酷而且功能強大,但是展示乙個實際的例子會更清晰。 使用的場景有1000種可能性。但是經典用法:

您可以使用它們以鏈式的方式擴充套件多個功能,如下所示:

def benchmark(func):

"""裝飾器,列印函式執行花費的時間。

"""import time

t = time.clock()

res = func(*args, **kwargs)

print(" ".format(func.__name__, time.clock()-t))

return res

def logging(func):

"""裝飾器,記錄指令碼的活動。(它實際上只是列印出來,但可能是在記錄日誌!)

"""res = func(*args, **kwargs)

print(" ".format(func.__name__, args, kwargs))

return res

def counter(func):

"""裝飾器,計算並列印執行功能的次數

"""res = func(*args, **kwargs)

return res

@counter

@benchmark

@logging

def reverse_string(string):

return str(reversed(string))

print(reverse_string("able was i ere i saw elba"))

print(reverse_string("a man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, spam, a rut, a rolo, cash, a jar, sore hats, a peon, a canal: panama!"))

#輸出:

#reverse_string ('able was i ere i saw elba',) {}

#able was i ere i saw elba

#reverse_string ('a man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, spam, a rut, a rolo, cash, a jar, sore hats, a peon, a canal: panama!',) {}

#!amanap :lanac a ,noep a ,stah eros ,raj a ,hsac ,olor a ,tur a ,maps ,snip ,eperc a ,)lemac a ro( niaga gab ananab a ,gat a ,nat a ,gab ananab a ,gag a ,inoracam ,elacrep ,epins ,spam ,arutaroloc a ,shajar ,soreh ,atsap ,eonac a ,nalp a ,nam a

當然,使用裝飾器的好處是您可以立即在幾乎所有內容上使用它們而無需重寫。比如:

@counter

@benchmark

@logging

def get_random_futurama_quote():

from urllib import urlopen

result = urlopen("").read()

try:

value = result.split("

")[1].split("

")[0]

return value.strip()

except:

return "no, i'm ... doesn't!"

print(get_random_futurama_quote())

print(get_random_futurama_quote())

#輸出:

#get_random_futurama_quote () {}

#the laws of science be a harsh mistress.

#get_random_futurama_quote () {}

#curse you, merciful poseidon!

本文首發於bigyoung小站

我終於弄懂了arraycopy

最近在看arraylist原始碼時,多次遇到了system.arraycopy 這個函式,於是就索性把它好好的研究了一番,感覺整個研究過程還是挺有意義的,也有了新的理解和收穫,在此做個記錄。讓我們先來看一下system.arraycopy 的原始碼 不知道大家在看它的時候有沒有什麼疑問呢,如果有的話...

時隔七個月,我終於弄懂了漢諾塔的思想

目錄 1.問題描述 2.漢諾塔的分析 3.博主的反思 4.詳解 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按...

LRU演算法的理解,終於懂了

以上是讓我看明白的部落格鏈結。下面是我自己的理解,比如下面這道題 可以這麼來看,有乙個容量為6的容器,每次放進去乙個有編號的球,如果容器中有相同編號的球,則將這個編號的球拿到容器的最上方,其它球按原來的相對位置下沉,如果容器滿了,還要往裡放,則將最底下的球拿出來丟掉,其他的球也是按原來的相對位置下沉...