python3 50個練習例子之裝飾器

2021-09-25 01:45:35 字數 1240 閱讀 6701

寫乙個計算斐波那契數列值的方法

1 1 2 3 5 8 13 21

def fibonacci(n):

if n <= 1:

return 1

return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10)) # 89

# 那麼問題來了,在遞迴深度足夠的情況下,下面的遞迴,2分鐘都不出來結果

print(fibonacci(50)) # 阻塞,無結果

# 當計算13的時候,又重新計算8和5,計算21的時候又重複計算13和8

83 5

1 2 2 3

加快取版的計算斐波那契數列值的方法

def fibonacci(n,cache=none):

# 第一次進來無快取物件

if cache is none:

cache = {}

# 如果在快取中有,則在快取中取

if n in cache:

return cache[n]

if n<=1:

return 1

# 快取沒有,則計算,且放入快取

cache[n] = fibonacci(n-1,cache) + fibonacci(n-2,cache)

return cache[n]

print(fibonacci(50)) # 20365011074

# 如果有多個方法都需要這樣的快取,每個都加,豈不是很累

# 用裝飾器,寫一次就夠。

用裝飾器

# 定義乙個裝飾器

def memo(func):

cache = {}

def wrap(*args):

if args not in cache:

cache[args] = func(*args)

return cache[args]

return wrap

#使用裝飾器

@memo

def fibonacci(n):

if n <= 1:

return 1

return fibonacci(n-1) + fibonacci(n-2)

# 還是一樣呼叫

print(fibonacci(50)) # 20365011074

python3 50個練習例子之建立臨時檔案

from tempfile import temporaryfile,namedtemporaryfile 在windows上兩者沒有區別 temporaryfile mode w b buffering 1,encoding none,newline none,suffix none,prefix...

python3 50個練習例子之拼接字串

普通拼接 from time import clock 有int str型別 l zhangsan 18,男 zhangsan 18,男 zhangsan 18,男 zhangsan 18,男 s start clock for i in l s str i 生成的臨時物件較多 end clock ...

Python 學習 小例子練習

網上了點小例子,練習一下下,都是特別簡單的。而且這些 也都是找的網上的 目的是在於練習一下python和熟悉下python的編碼風格等等 學習一門語言,最快的方法就是把它用在世界的開發中,這樣才能不斷的理解,積累,單純的靠看書,感覺是沒有太大的用途的一點一點慢慢來 第乙個,有1 2 3 4個數字,能...