遞迴函式
在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。
遞迴函式特性:
必須有乙個明確的結束條件;
每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入)。
遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)
遞迴的含義:
遞迴本身就是函式自己調自己,
舉乙個典型的例子:
計算1到100之間相加之和;通過遞迴兩種方式實現
def sum(max):
if max <= 100 and max >= 0:
return max +sum(int(max) - 1)
else:
return 0
print(sum(100))
下面是通過檔案和封裝函式來實現遞迴
import os#需要#用os模組開啟sys python系統
def func(path):#裡面放的是引數-->變數
#開啟這個資料夾-- 拿裡面的檔案的名字
lst=os.listdir('a')
for name in lst#拿到每個檔案的名字
#判斷name對應的檔案是資料夾還是檔案
#獲取到檔案所在的路徑
real_path=os.path.join(path,name)
if os.path.isdir(real_path):#判斷是否是資料夾,需要把檔案路徑扔進去
func(real_path)
else:
print(name)
func('a')#遞迴函式呼叫
python中的時間模組python 中有乙個 time 模組可以用於獲取當前時間戳:
import time
time1 = time.time() # 每個時間戳都以自從2023年1月1日午夜(曆元)經過了多長時間來表示,單位是秒
x = 10*10
time2 = time.time()
print(time2-time1) # 表示執行 x = 10*10 所用的時間
裝飾器def outer(x):
def inner(y):
return x + y
return inner # 這就是乙個閉包函式
print(outer(6)(5)) # 第乙個引數是傳給outer函式的,第二個傳給inner函式
執行結果:
11
如**所示,在 outer 函式內,又定義了乙個 inner 函式,並且 inner 函式又引用了外部函式 outer 的變數 x,這就是乙個閉包了。
裝飾器是閉包的一種應用,從字面上理解,就是裝飾物件的器件,其實裝飾器本質上就是乙個函式,功能是為其他函式新增功能,可以在不修改原有**的情況下,為被裝飾的物件增加新的功能或者附加限制條件或者幫助輸出。
當我們不使用裝飾器時:
def a(func):
def b():
print("我是附加功能1!") # 附加功能
func()
print("我是附加功能2!") # 附加功能
return b
def c():
print("我是函式原來的功能!")
res=a(c)
res()
執行結果:
我是附加功能1!
我是函式原來的功能!
我是附加功能2!
當我們使用裝飾器時:
def a(func): # func 表示乙個函式
def b():
print("我是附加功能1!") # 附加功能
func() # 呼叫傳入的函式
print("我是附加功能2!") # 附加功能
return b
@a # @函式名 表示使用裝飾器
def c():
print("我是函式原來的功能!")
c()
執行結果:
我是附加功能1!
我是函式原來的功能!
我是附加功能2!
使用裝飾器後,@a
等價於不使用裝飾器**中的res=a(c)
。當被裝飾的函式需要傳入引數時,裝飾器的巢狀函式就需要新增乙個引數。
def a(func):
def b(x): # 新增乙個引數
print("我是附加功能1!") #附加功能
func(x)
print("我是附加功能2!") #附加功能
return b
@adef c(x):
print("我是函式原來的功能!%s"%x)
c('hello action!')
執行結果:
我是附加功能1!
我是函式原來的功能!hello action!
我是附加功能2!
除了被裝飾的函式可以新增引數之外,裝飾器也是可以新增引數的。
def a(x):
def b(func):
def c(y):
func(y)
print(x)
return c
return b
@a('hello')
def d(x):
print(x)
d('你好!')
執行結果:
你好!
hello
python之裝飾器 函式
1.裝飾器 遵循的原則 開閉原則 對功能的擴充套件開放 對 的修改是封閉 通用裝飾器寫法 存在的意義 在不破壞原有函式和原有函式呼叫的基礎上,給函式新增新的功能.fn是目標函式 def inner args,kwargs 為了目標函式的傳參 在執行目標函式之前 ret fn args,kwargs ...
高階函式與裝飾器函式python
高階函式是在python中乙個非常有用的功能函式,所謂高階函式就是乙個函式可以用來接收另乙個函式作為引數,這樣的函式叫做高階函式。map map 是 python 內建的高階函式,它接收乙個函式function 和乙個 list,並通過把函式 function 依次作用在 list 的每個元素上,得...
python如何裝飾遞迴函式
裝飾函式printtime 列印遞迴函式執行時間 def printtime func wraps func def args,kwargs start time print func args,kwargs end time print spent time s end start 遞迴函式n d...