python之函式的引數詳解

2021-10-24 14:52:38 字數 2816 閱讀 9807

不可變資料型別:數字number(含int、float、bool、complex)、字串string、元組tuple。

當不可變資料型別被當作函式的引數,傳遞的是值,函式體內改變值時實際是生成新的物件,不會影響函式體外原來的值。例如:

x=10

def print_add_ten(x):

x+=10

print(x)

print_add_ten(x)

print(x)

out:

2010

可變資料型別:列表list、字典dict、集合set。

當可變資料型別被當作函式的引數,傳遞的是引用,函式體內改變值時會影響函式體外的值。例如:

x=[1,2,3,4,5]

def print_change_list(x):

x[0]=10

print(x)

print_change_list(x)

print(x)

out:

[10, 2, 3, 4, 5]

[10, 2, 3, 4, 5]

上述這個函式看起來沒有問題,但在特殊場合會導致不可預料的bug。推薦的方式是對可變資料型別引數做copy(注意若存在巢狀結構需要用deepcopy),然後做處理,並將處理結果返回給呼叫者。例如:

x=[1,2,3,4,5]

def print_change_list(x):

x=x.copy()

x[0]=10

return x

print(print_change_list(x))

print(x)

out:

[10, 2, 3, 4, 5]

[1, 2, 3, 4, 5]

位置引數:即按照位置傳入引數,引數的個數、位置、型別必須匹配。如:

def power(x, n):

s = 1

while n > 0:

n = n - 1

s = s * x

return s

print(power(2,3))

out:

8

預設值引數:是指該引數有預設值,預設值必須是不可變資料型別。如:

def power(x, n=2):

s = 1

while n > 0:

n = n - 1

s = s * x

return s

print(power(2))

print(power(2,3))

out:

48

可變引數:可變引數允許傳入0個或任意個引數,這些引數在函式呼叫時被封裝到乙個元組,並將這個元組賦值給了args。如:

def calc(*args):  # args是約定俗成的名字,可以自定義,但建議用args

sum = 0

for n in args:

sum = sum + n * n

return sum

print(calc(1,2,3))

out:

14

命名關鍵字引數:必須傳入引數名,不指定名字傳參會報錯。另外命名關鍵字引數也可指定預設值,有預設值的可以不傳參。如:

def person(*, name, age):

print(name, age)

person(name='mike', age=20)

#person('mike',20) # 不指定名字傳參會報錯

out:

mike 20

關鍵字引數:允許傳入0個或任意個含引數名的引數,這些關鍵字引數在函式呼叫時被封裝到乙個字典中,並將這個字典賦值給了kwargs。但關鍵字引數不能指定哪些關鍵字必須有。如:

def person(**kwargs):  # kwargs是約定俗成的名字,可以自定義,但建議用kwargs

print(kwargs)

person(name='mike',age=20)

person(gender='men',height=180)

out:

補充幾點:

*和**在函式定義時表示封裝,在函式呼叫時代表拆包。

def func(*args, **kwargs):

print(args)

print(kwargs)

print('-'*30)

func([1, 2, 3], [22, 33]) # 不拆包時函式接收的是2個列表

func(*[1, 2, 3], *[22, 33]) # 可迭代物件均可拆包,拆包後函式接收到的是乙個元組。

func(, ) # 這樣傳參的2個字典被args接收,kwargs接收的是空字典

func(**, **) # 這樣傳參的2個字典被kwargs接收,args接收的是空元組

out:

([1, 2, 3], [22, 33])

{}------------------------------

(1, 2, 3, 22, 33)

{}------------------------------

(, )

{}------------------------------

()------------------------------

函式之引數詳解

位置實參 不用明確形參名的傳參方式,一定按照位置給形參傳值 關鍵字實參 必須明確形參名字與值為形參傳值,可以不用按照位置 注 混用 1.關鍵字實參必須出現在位置實參後 2.多個位置實參還是按照位置傳參 3.關鍵字實參為沒有從位置實參拿到值的形參傳值,可以不用按照指定順序 def fn2 a,b,c,...

python函式引數的詳解

實參 呼叫函式,在括號內傳入的實際值,值可以為常量 變數 表示式或三者的組合 形參 定義函式,在括號內宣告的變數名,用來接受外界傳來的值 注 形參隨著函式的呼叫而產生,隨著呼叫結束而銷毀 位置實參 不用明確形參名的傳參方式,一定按照位置給形參傳值 關鍵字實參 必須明確形參名字與值為形參傳值,可以不用...

python函式的引數詳解

函式定義的格式 def my func pass 函式的引數 形參,實參,關鍵字引數 必須引數 def my func with param p1,p2 print p1,p2 my func with param 1,2 關鍵字引數 是在呼叫的時候制定引數名稱,可以不按照順序傳 def my fu...