Python學習5 函式與Lambda表示式

2021-09-29 00:07:53 字數 1829 閱讀 1411

python內建了很多函式可以直接用於呼叫

abs可以輸出絕對值

a=

abs(

-100.3

)print

(a)100.3

max可以接收數個引數並返回其中最大值

t1=(1

,54,64

,5,64

,56)print

(max

(t1)

)print

(min

(t1))64

1

內建函式可以轉換資料型別

print

(int

(3.4))

print

(float

('11'))

311.0

在python中,定義乙個函式要使用def語句,依次寫出函式名、括號、括號中的引數和冒號:,然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。

def

fun(a,b)

:if a>0:

a=a+

1else

: a=a-

1if b<0:

b=b-

1else

: b=b*

2return

(a,b)

print

(fun(3,

-2))

(4,-

3)

也可以定義乙個空函式,該函式什麼功能都不會實現,但是pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的**,就可以先放乙個pass,讓**能執行起來。

def

fun():

pass

a=17

if a>=14:

pass

可以利用返回乙個tuple來實現返回多個引數

在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。最簡單的例子就是階乘。

利用fact()可以實現階乘,其內部具體運算效果如下

===> fact(5)

===> 5 * fact(4)

===> 5 * (4 * fact(3))

===> 5 * (4 * (3 * fact(2)))

===> 5 * (4 * (3 * (2 * fact(1))))

===> 5 * (4 * (3 * (2 * 1)))

===> 5 * (4 * (3 * 2))

===> 5 * (4 * 6)

===> 5 * 24

===> 120

遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。

使用遞迴函式需要注意防止棧溢位。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。解決遞迴呼叫棧溢位的方法是通過尾遞迴優化,事實上尾遞迴和迴圈的效果是一樣的,所以,把迴圈看成是一種特殊的尾遞迴函式也是可以的。

尾遞迴是指,在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只占用乙個棧幀,不會出現棧溢位的情況。

上面的fact(n)函式由於return n * fact(n - 1)引入了乘法表示式,所以就不是尾遞迴了。

以上就是我學習函式的內容,我知道自己所了解到的僅僅是一小部分,希望通過後面學習能了解到更多相關知識。

Python3學習筆記09 匿名函式lamdba

關鍵字lambda表示匿名函式,冒號前面,面的x表示函式引數。匿名函式有個限制,就是只能由乙個表示式,不用寫return,返回值就是該表示式的結果。匿名函式有個好處,因為函式沒有名字,不必擔心函式名稱衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式 f l...

Python學習5 函式

廖雪峰的部落格 內建函式 使用 help 可以檢視函式 的幫助資訊 python內建函式 定義函式 在python中,定義乙個函式要使用def語句,依次寫出函式名 括號 括號中的引數和冒號,最後,在縮排塊中編寫函式體,函式的返回值用return語句返回。如下面所示 def my abs x if x...

Python學習筆記(5) 函式

encoding gbk 定義函式 def greet user username print hello,username.title greet user jim 定義具有返回值的函式 def get formatted name first name,last name full name f...