pyhthon 遞迴,裝飾器

2022-05-17 09:52:24 字數 3293 閱讀 2119

遞迴: 

遞迴的概念很簡單,如果函式包含了對其自身的呼叫,該函式就是遞迴。拗口一點的定義是,如果乙個新的呼叫能在相同過程中較早的呼叫結束之前開始,那麼該過程就是遞迴。

"""階乘"""

def jie(n):

if n==0 or n==1:

return 1

else:

return n*jie(n-1)

print fac(8)

d:\python3.5\python.exe d:/untitled/python2/denglu.py

40320

process finished with exit code 0

'''''''''''遞迴方式『'''''''''''''''''

def digui(n):   #定義函式 迴圈後的結果

print(n) #輸出每一次的結果

if n == 1: #如果不等於繼續向下執行

return 1 #返回最終的結果

return digui(n-1) * 1 #返回的值減一在乘一

s = digui(10) #執行函式

print(s)

'''''''''''''''''斐波那契數列''''''''

斐波那契數列指的是這樣乙個數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

def digui(a,a1,a2): #定義函式,引數 #a = 2 a1= 13,a2 = 15 。。。。。。。。

if a == 10: #判斷如果q不等於10 就向下執行

return a,a1,a2

a3 = a1 + a2 #兩數相加附乙個新值 a3 等於15

re = digui(a + 1,a2,a3) #繼續回去一級一級迴圈結果 最終結果484

return re #定乙個返回值 一級一級退出迴圈

z = digui(1,2,13) #執行函式的最終結果

print(z)

d:\python3.5\python.exe d:/untitled/python2/denglu.py

(10, 484, 783)

process finished with exit code 0

def di(n,n1): #定義函式 引數 0,1

print(n) #輸 出最終的結果

if n > 100: #如果n(0)大於100就向下繼續執行直到大於100

return #返回終止

n2 = n + n1 # n=0 n1 = 1 n2 = 1

di(n1,n2) #兩數相加繼續迴圈

di(0,1) #執行函式 裡的引數值

d:\python3.5\python.exe d:/untitled/python2/denglu.py01

1235

8132134

5589

144process finished with exit code 0

def digui(q,q1):

print(q,q1)

if q == 10:

return

w = q2 = q + q1

return w

s = digui(34,324)

print(s)

d:\python3.5\python.exe d:/untitled/python2/lianxi.py

34 324

358process finished with exit code 0

裝飾器:

裝飾器是函式,只不過該函式可以具有特殊的含義,裝飾器用來裝飾函式或類,使用裝飾器可以在函式執行前和執行後新增相應操作。

def func(x):

print(x)

x =123 # 實參 x 代指123

func(x) 執行函式

巢狀一層的裝飾器:

def quan(yuan):#1 #定義裝飾器函式, 這的引數代指的是原來(yuan1)函式

def xin(): #2 #4 裝飾器的內建函式//// 被原函式重新賦值的

print('新的') #5 執行函式前的操作

ret = yuan() #6 執行原來的函式

print('後來的') #10 執行後的操作

return ret #11 原函式的返回值

return xin #3 返回的新函式的返回值

@quan #5 #7 自動應用執行裝飾器的引數就是(yuan1)

def yuan1(): #原來的函式被重新賦值給了新的函式 定義為xin()

print('原來') #8 輸出原來的值

return 'yes' #9 返回乙個結果

s = yuan1() #執行函式結果

print(s)

巢狀兩層的裝飾器:

def quan_0(gun): #原來的yuan 函式做了兩次賦值 把quan函式呼叫成自己的內建函式

# 被quan_0代指 而這個gun引數等於quan內建函式裡的gun引數

def xin(*args,**kwargs): #xin函式等於第二個裝飾器的原來yuanl數重新第二次的賦值

print('123')

r = gun(*args,**kwargs)

return r

return xin

def quan(gun):

def xin(*args,**kwargs):

print("小伙")

r = gun(*args,**kwargs) #gun引數等於yuan函式裡的引數

print('好')

return r

return xin

@quan_0

@quan

def yuan(q1,q2):

print('火了')

return q1 + q2

s = yuan(12,21)

print(s)

day10 裝飾器 遞迴

一 裝飾器 作用 不修改模組原 的情況下給模組新增新功能 關鍵字 from functools import wraps defouter fn wraps fn 用於保留原函式的屬性,不使用則被修飾函式的屬性變成inner函式的屬性 wraps fn definner args,kwargs pr...

小技巧 裝飾器裝飾乙個遞迴函式

在python中裝飾器可以為原函式新增一些功能。但如果函式本身是遞迴定義的,則不會僅裝飾最外層,而是在每次遞迴的時候都呼叫裝飾器。這樣會導致原函式無法被直觀的裝飾。首先定義乙個裝飾器 隨便定義乙個裝飾器 defmy decorator fun def decorator args,kwargs fu...

Python之遞迴函式與裝飾器

遞迴函式 在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。遞迴函式特性 必須有乙個明確的結束條件 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少 相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備 通常前一次的輸出就作為後一次的輸入 遞迴效率不高,遞迴...