Python基礎之函式

2021-09-07 10:33:05 字數 3662 閱讀 2201

不同型別的引數的優先順序(在引數列表中的順序)

def

testfunc1()

:pass

這是乙個最簡單的函式,沒有引數,沒有返回,pass表示該函式沒有做任何操作,testfunc1是函式名,def是關鍵字,表示這是乙個函式

呼叫函式時給出函式並給函式傳遞相應的引數,對於命名關鍵字引數需要給出引數名,位置引數若給出引數名,則不用考慮引數名的順序

函式以關鍵字return表示函式的返回,返回的值可以被乙個變數接收。返回可以是0到多個任何型別的值,若返回沒有值返回為none。

return可以表示函式的結束。

def

testfunc2

(a,b)

:return a+b

# 函式有返回值,可以用乙個變數接受返回的值

c = testfunc2(1,

2)print

(c)# 函式可以返回多個值

deftestfunc3

(a,b)

:return a,b

d = testfunc3(1,

2)

# 1、位置引數,位置引數要求與呼叫函式時傳入的引數相匹配,函式定義時有幾個引數,

# 就要傳入幾個引數,即不能多也不能少。

deftestfunc4

(a,b)

:print

(a*a)

print

(b+b)

testfunc4(2,

1)# 傳入引數的順序與引數列表的順序相同,但是可以用[引數名=引數值]的方式傳遞引數,

# 這時,函式會通過引數名進行相互的對應,即使引數順序不與引數列表中的順序相同也

# 不會報錯

testfunc4(b=

2,a=

2)

預設引數是在函式定義時,給引數乙個預設值,如果在呼叫函式時,沒有傳入這個引數,函式會以定義時給出的值進行處理

def

testfunc5

(a,b=2)

:print

(a*b)

testfunc5(2,

3)# 返回6

testfunc5(2)

# 返回4

預設引數必須指向不變物件,因為python函式在定義的時候,預設引數就會被計算出

來,預設值也是乙個物件,預設引數指向這個物件,每次呼叫這個函式時,如果改變了這個預設引數的值,那麼下次呼叫時,預設引數的內容就變了。

python中的不可變物件包括數值型別(int,float,布林值),字串,元組

def

testfunc6

(a,b=

):print

(b)

對上面的**進行測試:

testfunc6(1)

# 執行結果為[1, 2]

testfunc6(2)

# 執行結果為[1, 2,3]

testfunc6(3)

# 執行結果為[5,4]

testfunc6(4,

[5])

# 執行結果為[1, 2, 3, 6]

testfunc6(

6)

產生這種結果的原因是,python**在執行函式之前會將整個函式放到記憶體中,然後在記憶體中執行它,對於b這個預設引數,在記憶體中分配了一塊位址儲存了引數的預設值,在呼叫函式時,如果沒有給它傳值,則會使用預設的引數值,若是在函式中改變了這個值,則相應位址的值也會發生改變,下次再呼叫時如果不傳值還會使用這個值,這就是為什麼出現前三次結果的原因。如果再呼叫函式時,給預設引數傳遞了引數值,則該引數值自己擁有乙個儲存位址,對這個位址上的操作不會影響到引數的預設值。這就是出現第四個結果的原因如果繼續呼叫上面的函式,而不給預設引數傳入值,預設引數又會使用預設值,因為再前三次呼叫該函式時已經改變了預設值,所以新的結果會收到之前的影響。

可變引數允許傳入0到多個值,在引數名前加*號表示可變引數,可變引數會將傳入的引數封裝成乙個不可變的元組,再對元組中的每乙個資料進行操作。

def

testfunc7

(*args)

:print

(args)

for i in args:

print

(i**2)

testfunc7(1,

2,3)

若是有了乙個list或者tuple,想將整個list或者tuple當作引數傳遞給函式,可以在引數前加*號,表示將整個列表或元組當作引數傳遞給函式

list=[

1,2,

3]testfunc7(

*list

)tuple=(

1,2,

3)testfunc7(

*tuple

)

關鍵字引數也是可變引數,允許傳入0到多個引數,引數名前加**表示關鍵字引數,但是在傳入引數時必須遵循key=value的格式,傳入的鍵值對會被封裝成乙個字典

def

testfunc8

(**kwargs)

:print

(kwargs)

testfunc8(a=

1,b=

2,c=

3)

若已有乙個字典想將字典中的鍵值對作為引數傳遞給函式,需要在引數前加**

dict

=testfunc8(

**dict

)

命名關鍵字引數限制了關鍵字引數的名字,和關鍵字引數**kw不同,命名關鍵字引數需要乙個特殊分隔符**後面的引數被視為命名關鍵字引數。給命名關鍵字引數傳值的時候要以鍵值對的方式傳值,一旦設定的命名關鍵字引數,就必須給其傳值,當然,命名關鍵字引數也可以設定預設值下面**中,a,b是位置引數,*分隔符,表示後面的引數是命名關鍵字引數,c,d即命名關鍵字引數

def

testfunc9

(a,b,

*,c,d=0)

:print

(a+b+c+d)

testfunc9(1,

2,c=3)

testfunc9(1,

2,c=

3,d=

4)

#如果命名關鍵字前有可變引數則不需要*分隔

def

testfunc10

(a,b,

*args,c)

: k =

0for i in args:

k = k+i

print

(a+b+k+c)

testfunc10(1,

2,3,

4,c=

5)

必選引數(位置引數)-> 預設引數 -> 可變引數 -> 命名關鍵字引數 -> 關鍵字引數

def

testfunc

(a,b=0,

*args,c,d=

0,e,

**kwargs)

:pass

python之函式基礎

python 函式 python函式可以返回多值 defadd dif x,y,sum x y dif x y return sum,dif a,b add dif 2,3 print a,b 5 1 r add dif 2,3 print r 5,1 本質來說返回多值的函式其實返回乙個元組tupl...

Python之函式(基礎)

1.函式的定義 1 函式的定義與呼叫 定義函式 def say hello print hello1 print hello2 print hello3 呼叫函式,函式只有被呼叫了才會有輸出值 示例1 定義求和函式 計算 20 30 2 函式的巢狀 def fun1 print world def ...

python基礎之函式

在任何一門程式語言中,函式都是非常重要的乙個部分,當然python裡也不例外。不過python裡函式也會有一些額外的擴充,比如巢狀函式,閉包和現在很多程式設計 語言都有的lambda表示式。先來看一下python裡正常函式的樣子 a 1def func num print num a 函式裡可以直接...