Python(三)之函式

2021-10-25 17:23:21 字數 3463 閱讀 5472

定義乙個函式只要以"def"開頭即可,python內建了很多有用的函式,我們可以直接呼叫。

def

function_name

(arg1)

: function body

return value

函式名(function_name):函式名以字母或下劃線開頭,並且區分大小寫

函式引數(arg1):呼叫乙個函式時可以傳遞的引數,引數可以沒有,也可以有乙個或多個

函式內容(function body):在函式的內部,與"def"相比需要縮排4個空格

函式返回值(return value):函式執行完成後返回的值,也可以不返回內容,預設為none

必須引數:如果函式內容中使用了此函式引數,此引數就是必須引數,呼叫函式時缺少的話就會報錯

#定義函式

deffun1

(a):

print

(a)#呼叫函式

fun1(1)

執行結果:

1

#定義函式

deffun1

(a):

print

(a)#呼叫函式

fun1(

)執行結果:

發生異常:typeerror fun1(

) missing 1 required positional argument:

'a'

關鍵字引數:使用關鍵字引數可以不按引數的順序來呼叫函式
def

fun1

(a,b)

:print

(a,b)

fun1(

"深圳"

,"廣州"

)fun1(b=

"廣州"

,a="深圳"

)執行結果:

深圳 廣州

深圳 廣州

預設引數:在定義函式時給引數新增預設值,如果呼叫函式時沒有傳入引數,函式就會使用預設值。注意:預設引數一定要定義在必須引數的後面

def

fun1

(a,b =1)

:print

(a,b)

fun1(

"深圳"

)fun1(

"深圳"

,"廣州"

)執行結果:

深圳 1

深圳 廣州

可變引數:如果我們不能在定義函式的時候確定引數的數量和內容,就可以使用可變引數。如下:用 * 分隔開,args表示乙個元組,用 ** 分隔開,kwargs表示乙個字典

def

fun1

(*args,

**kwargs)

:print

(args)

print

(kwargs)

i =(1,

2,3)

j =fun1(

*i,**j)

執行結果:(1

,2,3

)

組合引數:顧名思義,就是將上面的必須引數、關鍵字引數、預設引數、可變引數組合到一起使用

變數的作用域相當於變數的命名空間,python中變數賦值的位置決定了哪些範圍的物件可以訪問這個變數,這個範圍被稱為作用域。python中有兩種最基本的變數作用域:區域性變數和全域性變數。

區域性變數:一般情況下,在函式內進行賦值的變數和不做特殊宣告的變數都是區域性變數

#變數a在函式內賦值,屬於區域性變數

deffun1()

: a =

1print

(a)fun1(

)執行結果:

1

#變數b屬於函式的引數,也屬於區域性變數

deffun1

(b):

print

(b)fun1(1)

執行結果:

1

全域性變數:在函式外賦值的變數就屬於全域性變數,全域性變數可以在整個程式範圍內進行訪問

#變數a在函式外賦值,屬於全域性變數

a =1

deffun1()

:print

(a)fun1(

)

lambda表示式也稱為匿名函式,不再使用 def 語句這樣標準的形式定義乙個函式,就是匿名函式。

a =

lambda x, y : x + y

print

(a(1,2

))執行結果:

3

":「左邊的"x」,"y"是函式的引數

":"右邊的是要返回的值

"a(1,2)"是呼叫此lambda函式

注意:lambda 函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數

如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。例如連加、連乘及階乘等

#階乘

deffact1

(n):

if n ==1:

return

1return n * fact1(n-1)

#fact1(5) = 5! = 5*4*3*2*1

print

(fact1(5)

)執行結果:

120

注意:使用遞迴函式需要注意防止棧溢位,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位,解決遞迴呼叫棧溢位的方法是通過尾遞迴優化

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

def

fact1

(n):

return fact2(n,1)

deffact2

(a, b)

:if a ==1:

return b

return fact2(a -

1, a * b)

print

(fact1(5)

)執行結果:

120

執行過程

fact1(5)

-》fact2(5,

1)-》fact2(4,

5)-》fact2(3,

20)-》fact2(2,

60)-》fact2(1,

120)

-》120

乙個堅持學習,堅持成長,堅持分享的人,即使再不聰明,也一定會成為優秀的人!

如果看完覺得有所收穫的話,記得一鍵三連哦,謝謝大家!

python複習三之函式

知識點彙總 1 函式的概念 1 就是一段 2 一段操作流程 優點 1 量少 簡潔 2 維護起來方便 在函式的定義進行修改 2 函式的定義 1 def 函式名 函式內容 2 函式的定義是不會執行函式內容的 的!3 案例 def func print step1 print step2 4 type f...

python學習之函式(三) 函式與過程

1.函式與過程的區別 有返回值的是函式,沒有返回值的是過程 函式 function 有返回值 過程 procedure 簡單特殊,沒有返回值 嚴格來說,python只有函式,沒有過程。沒有返回值的函式,預設有乙個返回值none 2.返回值 返回值可以是多種型別,也可以返回多個資料,可以用陣列打包返回...

Python 入門之經典函式例項(三)

r星校長 第3關 map reduce 對映與歸約的思想 python 中有兩個非常常見的內建函式 map 和reduce 函式。這兩個函式都是應用於序列的處理函式,map 用於對映,reduce 用於歸併。本關目標就是讓學習者了解並掌握map 和reduce 函式的相關知識。map 函式 map ...