1 匿名函式語法
匿名函式lambda x: x * x實際上就是:
def
f(x):
return
x
*
x
關鍵字lambda表示匿名函式,冒號前面的x表示函式引數。
匿名函式有個限制,就是只能有乙個表示式,不用寫return,返回值就是該表示式的結果。
2 匿名函式舉例
用匿名函式有個好處,因為函式沒有名字,不必擔心函式名衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式:
>>> f
=
lambda
x: x
*
x
>>> f
at
0x10453d7d0
>
>>> f(
5
)
25
同樣,也可以把匿名函式作為返回值返回,比如:
def
build(x, y):
return
lambda
: x
*
x
+
y
*
y
遞迴函式
1、遞迴函式定義
遞迴就是引用(或者呼叫)自己的意思
有用的遞迴函式包含以下幾個部分:
1 必須有乙個明確的結束條件
2 每次進入更深一層遞迴時,問題規模相比於上次遞迴都應有減少
3 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫時通過棧stack這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位,程式會以乙個「超過最大遞迴深度」的錯誤資訊結束)
遞迴中每次函式被呼叫,針對這個呼叫函式的新命名空間會被建立,意味著當函式呼叫「自身」時,實際上執行的是兩個不同的函式(或者說是同乙個函式具有兩個不同的命名空間)
遞迴的深度:
import
sys
print
(sys.getrecursionlimit())
輸出結果為:
1000
2 遞迴函式實現二分法舉例
二分法舉例:
data
=
list
(
range
(
1000
))
def
sear(num,data):
if
len
(data)>
1
:
#二分
mid_index
=
int
(
len
(data)
/
2
)
mid_value
=
data[mid_index]
if
num > data[mid_index]:
#num在列表的右邊
data
=
data[mid_index:]
sear(num,data)
elif
num < data[mid_index]:
#num在列表的左邊
data
=
data[:mid_index]
sear(num,data)
else
:
print
(
"find it"
)
return
else
:
if
data[
0
]
=
=
num:
print
(
'find it'
)
else
:
print
(
'not exists'
)
sear(
0
,data)
sear(
999
,data)
sear(
10000
,data)
輸出結果為:
find it
find it
not
exists
求5的階乘
def
num (n):
if
n
=
=
1
:
return
1
else
:
return
num (n
-
1
)
*
n
print
(num(
5
))
輸出結果為:
120
方法和函式的區別
1 呼叫方法不一樣 函式括號 方法點號
2 方法只對呼叫它的物件有用
函式沒有繫結任何物件
方法可以繫結到具體的物件
函式式程式設計概念
程式設計風格
1不會修改外部值的狀態
2 精簡,可讀性差
python匿名函式和遞迴
命名空間 內建命名空間 python直譯器一啟動就可以使用的名字儲存在內建命名空間 在啟動器啟動時被載入進記憶體裡 全域性命名空間 程式從上到下被執行的過程中一次載入進記憶體 放置了我們所有設定的變數名和函式名 區域性命名空間 函式內部定義的名字 當函式呼叫時,才會產生這個命名空間,隨著函式執行的結...
python之遞迴函式 匿名函式
定義 遞迴,就是函式自己呼叫自己 deffunc num int input num if num 2 0 print 是偶數 return else func 匿名函式 2 匿名函式 意義 減少記憶體占用 lambada 定義乙個匿名函式,eg lambad x,b x b 前面是入參eg x,b...
python遞迴函式和匿名函式
乙個函式的內部可以呼叫其他函式。但是,如果乙個函式在內部不呼叫其他函式,而是自己本身的話,這個函式就是遞迴函式。例 def fn num if num 1 result 1else result fn num 1 num return result n int input 請輸入乙個正整數 prin...