python遞迴函式和匿名函式

2021-10-07 06:30:40 字數 2010 閱讀 9505

乙個函式的內部可以呼叫其他函式。但是,如果乙個函式在內部不呼叫其他函式,而是自己本身的話,這個函式就是遞迴函式。

例:

def

fn(num)

:if num==1:

result=

1else

: result=fn(num-1)

*num

return result

n=int

(input

("請輸入乙個正整數:"))

print

("%d!="

%n,fn(n)

#相當於乙個數的階乘

匿名函式就是沒有名稱的函式,即不再使用def語句定義的函式。如果要宣告匿名函式,則需要使用lambda關鍵字,匿名函式的宣告格式如下:

lambda [arg1 [,arg2,...,argn]]:expression
格式中:[arg1 [,arg2,…,argn]]表示的是函式的引數,expression表示的是函式的表示式。例如:

sum

=lambda arg1,arg2,arg3:arg1+arg2+arg3

print

("執行結果"

,sum(19

,21,60

))

需要注意的是:

(1)使用lambda宣告的匿名函式能就收任何數量的引數,但只能返回乙個表示式的值。

(2)由於lambda需要乙個表示式,匿名函式不能直接呼叫print()。

接下來通過幾個例子演示它的作用。

例1:匿名函式作為函式引數傳遞。

def

fun(a,b,opt)

:print

("a=%d"

%a)print

("b=%d"

%b)print

("result="

,opt(a,b)

)fun(11,

22,lambda x,y:x*y)

#結果為242

print

("----------------"

)fun(11,

22,lambda x,y:x/y)

#結果為0.5

例2:匿名函式作為內建函式的引數。

stus=[,

,]#按name排序:

stus.sort(key=

lambda x:x[

'name'])

print

("按name排序後的結果為:"

,stus)

#按age排序

stus.sort(key=

lambda x:x[

'age'])

print

("按age排序後的結果為:"

,stus)

與def相比,匿名函式lambda的建立有如下幾處不同點:

(1)最主要的區別之一是前者建立的函式是有名稱的,而後者是沒有名稱。

(2)前者返回的結果通常是乙個物件或者乙個表示式,且不會將結果賦給乙個變數,而後者可以。

(3)前者只是乙個表示式,函式體簡單,而後者是乙個語句。

(4)前者表示式的冒號後面只能有乙個表示式,後者可以有多個。

(5)前者不能用於部分語句(如if或for等語句),後者可以。

(6)前者一般用來定義簡單的函式,而後者可以定義複雜的函式。

(7)前者的函式不能共享給別的程式呼叫,後者可以。

python匿名函式和遞迴函式

匿名函式格式 lambda 引數 運算 例子 hello lambda a,b a b 匿名函式一半結合內建函式使用 max list,func func匿名函式比如 列表裡面元素是字典 就是可以 list,lambda x x 鍵 min 和max幾乎一樣 map func iterables 對...

python匿名函式和遞迴

命名空間 內建命名空間 python直譯器一啟動就可以使用的名字儲存在內建命名空間 在啟動器啟動時被載入進記憶體裡 全域性命名空間 程式從上到下被執行的過程中一次載入進記憶體 放置了我們所有設定的變數名和函式名 區域性命名空間 函式內部定義的名字 當函式呼叫時,才會產生這個命名空間,隨著函式執行的結...

匿名函式和遞迴

lambda 匿名函式 為了解決一些簡單的需求而設計的一句話函式 lambda函式不需要def來宣告,一句話就可以宣告出乙個函式 語法 函式名 lambda 引數 返回值 需要注意的是 1.函式的引數可以有多個,多個引數之間用逗號隔開 2.匿名函式不管多複雜,只能寫一行,切邏輯結束後直接返回資料 2...