Python中的函式引數問題

2021-08-16 21:40:38 字數 4167 閱讀 5534

python

中函式引數的傳遞方式分為:

1)位置引數

這個說白一點就是普通的引數傳遞,比如定義乙個求和函式:

def fun1(a,b):

return a+b

其中的引數a和

b即為位置引數

2)預設引數

有時候需要給引數設定乙個預設值,比如定義乙個求次方的函式:

def fun2(x,n=2)

return x**n

其中n=2

即為預設引數,呼叫的方式如下:

● fun2(5,4):計算5的

4次方● fun2(5):計算5

的平方

3)可變引數

顧名思義,即可以傳入任意個數的引數(包括

0個),比如定義乙個求和函式:

def fun3(*x):

calc=1

for a  in x:

calc+=a

return calc

該函式與上面位置引數的不同之處在於:可以傳入任意個引數參與計算,也可直接傳入乙個

list

或者tuple

,而位置引數那裡只能傳兩個,呼叫方式如下:

● fun3(1, 2, 3, 4, 5):計算

1-5的和

● l = [1, 2, 3, 4, 5] fun3(*l):計算

1-5的和

4)關鍵字引數

關鍵字引數允許傳入任意個含引數名的引數(包括

0個),比如定義乙個學生資訊錄入函式:

def fun4(name,age,**kw):

print('name:',name,'age:',age,'other:',kw)

呼叫方式如下:

● 只傳入必選引數,如

:fun4('zhou',21);

● 傳入任意個數的關鍵字引數,如

:person('zhou',21city='sq',job='stu');

● 先組裝出乙個

dict,然後,

把該dict

轉換為關鍵字引數傳進去,如:

a=;fun4('zhou',21,**a)

5)命名關鍵字引數

即限制了關鍵字引數的名字,大白話就是可以傳入關鍵字引數,但是不能瞎取名字,得按給定的名字來。

格式:fun(a,*,b)

,命名關鍵字引數需要乙個特殊分隔符*,

*後面的引數被視為命名關鍵字引數

def fun5(name,age,*,city,job):

print(name,age,city,job)

呼叫方式如下:

● fun5('zhou',21,city='sq',job='stu')

如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符

*了:即

fun5(a,*b,c)

引數的呼叫順序:

位置引數

>

預設引數

>

可變引數

>

關鍵字引數

>

命名關鍵字引數

def f(a,b,c=0,*d,**kw):

print('a=',a,'b=',b,'c=',c,'d=',d,'kw=',kw)

解惑:

①普通的位置引數也可以傳入

list

或者tuple

,比如fun1

的呼叫:

● print(fun1([1,2,3],[4,5,6]))

● print(fun1((1,2,3),(4,5,6)))

②預設引數的坑:

def add_fun(a=):

return a

此函式呼叫時,會出現如下結果:
>>>add_fun()

['end','end']

>>>add_fun()

['end','end', 'end']

解決預設引數的坑

:定義預設引數要牢記一點:預設引數必須指向不變物件。

none

是不變物件,上述**可改為:

def add_fun(a=none):

if(a is none):

a=return a

關於原資料經過函式作用後是否改變的問題:(1

)普通的修改不會改變原資料的值,例如:

defswap(a,b)

a,b=b,a

return a,b

呼叫①,a=3;b=4 print(swap(a,b)),呼叫結束後a和b的值不會發生改變;
呼叫②

,a=[1,2,3];b=[4,5,6] print(swap(a,b))

,呼叫結束後a和

b的值不會改變。 (

2)會改變的情況:

對於列表,在函式中修改元素列表(如

a[0]=6

)、新增元素(如

)、刪除元素(如

a.pop()/a.remove(1)

)都會使得原列表發生改變,如下表所示:

函式

def fun(a,b):
a[0]=6
a=[1,2,3];b=[4,5,6]
fun1(a,b)
print('呼叫後a=',a)
print('呼叫後b=',b)

def fun(a,b):
a=[1,2,3];b=[4,5,6]
fun1(a,b)
print('呼叫後a=',a)
print('呼叫後b=',b)

def fun(a,b):
a.pop()
a=[1,2,3];b=[4,5,6]
fun1(a,b)
print('呼叫後a=',a)
print('呼叫後b=',b)

def fun(a,b):
a.remove(1)
a=[1,2,3];b=[4,5,6]
fun1(a,b)
print('呼叫後a=',a)
print('呼叫後b=',b)結果

a= [6, 2, 3]

b= [4, 5, 6]

a= [1, 2, 3, 4]

b= [4, 5, 6]

a= [1, 2]

b= [4, 5, 6]

a= [2, 3]

b= [4, 5, 6] (

3)禁止函式修改列表:

向函式傳遞列表的副本而不是原件,這樣在函式中所做的修改不會影響到原列表,如下所示:

function_a(list_a[:])

切片表示法建立列表的副本。

Python中函式引數傳遞問題

先上兩個例子 a 1 deffun a a 2fun a print a 結果為1 fun a 中的a,可以看做函式中的形參,可以用任何字元代替 fun aaa a deffun a fun a print a 結果為 1 所有的變數都可以理解是記憶體中乙個物件的 引用 或者,也可以看似c中void...

python函式的引數問題

函式的定義方式 def 函式名 塊函式的呼叫方式 函式名 上面是最簡單的無引數函式。函式高階,就是帶有引數的函式,樣例如下 def demo x,y return x y 呼叫方式 print demo 1,2 輸出3demo函式做只做了兩個引數的加法運算。python的引數如下幾種 1.必須引數 ...

Python函式引數中的 ,

問題 python的函式定義中有兩種特殊的情況,即出現 的形式。如 def execute command self,args,options 等。解釋 用來傳遞任意個無名字引數,這些引數會乙個tuple的形式訪問。用來處理傳遞任意個有名字的引數,這些引數用dict來訪問。應用 的應用 def fu...