函式傳參字典 Python函式傳參方法超級大彙總

2021-10-25 12:44:42 字數 3458 閱讀 7076

位置引數

位置引數傳遞是最為簡單的傳遞方式,按照函式引數的位置順序逐個匹配傳入,傳入引數的個數必須與函式引數個數一致。

見示例1,根據位置順序進行匹配,a,b,c分別賦值為2,3,4

#示例1

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,4) #輸出結果 args: 2 3 4

通過關鍵字對變數進行賦值,可以對全部關鍵字進行賦值,這時候位置可以隨意改變。見示例2,輸出結果與示例1一致。

#示例2

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(c=4,a=2,b=3) #輸出結果 args: 2 3 4

也可以對部分關鍵字進行賦值,這屬於位置引數和關鍵字引數的混用,有關鍵字的部分必須放在後面,見示例3

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,c=4,b=3) #輸出結果 args: 2 3 4

有些函式引數提供了預設值,如果要使用,可不傳入,如示例4

#示例4

def func(a,b,c=4):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3) #輸出結果 args: 2 3 4

如果不使用其定義的預設值,可自行傳入,對其修改,如示例5

#示例5

def func(a,b,c=4):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,5) #輸出結果 args: 2 3 5

與普通關鍵字引數不同,命名關鍵字引數必須用*進行區分,*後面的引數必須通過關鍵字傳入,見示例6

#示例6

def func(a,b,*,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,c=4) #輸出結果 args: 2 3 4

如果不按照關鍵字傳入,則報typeerror的錯誤,見示例7

示例7

def func(a,b,*,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,4)

#typeerror: func() takes 2 positional arguments but 3 were given

如果定義的函式中帶有*args或者**args都是屬於可變引數方式進行引數傳入

*args是以元組的方式收集不匹配的的位置引數,見示例8

#示例8

def func(a,b,*c):

print("args c:"c)

if __name__ == "__main__":

func(2,3,4,5,6) #輸出結果 args c: (4, 5, 6)

在示例8中,有a,b,c3個形式引數,但是按照位置引數的形式傳入了5個引數,最後的3個引數都按照元組的形式(4,5,6)傳給了c。

定義函式時候,*args必須放在位置引數後面,否則報typeerror的錯誤,見示例9。

#示例9

def func(a,*c,d):

print("args c:",c,d)

if __name__ == "__main__":

func(2,3,4,5,6)

#typeerror: func() missing 1 required keyword-only argument: 'd'

**args是以字典的形式收集不匹配的位置引數,僅對關鍵字引數傳入有效,見示例10

示例10

def func(a,b,**c):

print("args c:",c)

if __name__ == "__main__":

func(2,3,c=4,d=5,e=6)#輸出結果 args c:

在示例10中,引數c收集了以字典的形式收集了後面的3個引數。跟*args一樣,函式中的**args必須放在位置引數後面。

再看乙個傳參方式混合使用的的例子,見示例11。

#示例11

def func(a,*b,c=none,**d):

print("a:",a)

print("b:",b)

print("c:",c)

print("d:",d)

if __name__ == "__main__":

func(2,3,4,c=4,d=5,e=6)

輸出結果如下所示:

a: 2

b: (3, 4)

c: 4

d:

從示例11可見,2賦值給a,b以元組的形式收集了3,4,c=4修改了預設引數的值,d以字典的形式收集了4,5,6

前面所說的*args或者**args是出現在函式定義中的,其實在引數傳入時候也可以使用使用*和**,他們會資料進行解包。如示例12和示例13

示例12

def func(a,b,c):

print("a:",a,",b:",b,",c:",c)

if __name__ == "__main__":

a=(2,3,4)

func(*a)#輸出結果 a: 2 ,b: 3 ,c: 4

示例13

def func(a,b,c):

print("a:",a,",b:",b,",c:",c)

if __name__ == "__main__":

a=func(**a)#輸出結果 a: 2 ,b: 3 ,c: 4

以上...有點長了。

函式傳參字典 Python 函式引數解包

做乙個簡單 明亮 快樂的手藝人。函式引數解包 function argument unpacking 是在函式傳參時將iterable引數物件中的元素解包出來的一種技術。想象乙個場景,當函式所有實參儲存在乙個 tuple 或者 list 中時,如何優雅傳參?def print info name,a...

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...

Python函式傳參

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...