位置引數傳遞是最為簡單的傳遞方式,按照函式引數的位置順序逐個匹配傳入,傳入引數的個數必須與函式引數個數一致。
見示例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
示例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函式傳參方法超級大彙總
位置引數 位置引數傳遞是最為簡單的傳遞方式,按照函式引數的位置順序逐個匹配傳入,傳入引數的個數必須與函式引數個數一致。見示例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...
Python 函式引數傳參方式
目錄 函式定義 呼叫 函式引數傳參 函式引數可變引數傳參 例子 引數解構 呼叫 預設值引數傳參 關鍵字引數的可變引數 有位置可變引數和關鍵字可變引數位置可變引數在形參前使用乙個星號 關鍵字可變引數在形參前使用兩個星號 位置可變引數和關鍵字可變引數都可以收集若干個實參,位置可變引數收集形成乙個tupl...
python傳參方式 Python函式引數傳遞方式
python 函式引數傳遞方式並不像其他語言那樣是 指標 引用 和 值傳遞,而是 物件引用傳遞,本質上是 引用傳遞 可以說 python 中不存在 值傳遞,而是存在 不可變物件 容易誤判的操作 容易被誤認為是 引用傳遞 的操作 def case1 l list int none alist list...