1. 元組形式
def test1(*args): print('################test1################') print(type(args)) print(args)
正確調用:
test1(1, 2) #args在函數體內部為tuple類型
錯誤調用:
test1(1, b=2) #TypeError: test1() got an unexpected keyword argument 'b'
test1(a=1, b=2) #TypeError: test1() got an unexpected keyword argument 'a'
test1(a=1, 2) #TypeError: test1() got an unexpected keyword argument 'a'
2. 字典形式
def test2(**kargs): print('################test2################') print(type(kargs)) print(kargs)
正確調用:
test2(a=1, b=2) #kargs在函數體內部為dict類型
錯誤調用:
test2(1, 2) #TypeError: test2() takes exactly 0 arguments (2 given)
test2(1, b=2) #TypeError: test2() takes exactly 0 arguments (2 given)
test2(a=1, 2) #SyntaxError: non-keyword arg after keyword arg
3. 混合形式
def test3(*args, **kargs): print('################test3################') print(type(args)) print(args) print(type(kargs)) print(kargs)
正確調用:
test3(1, 2) #args在函數體內部為tuple類型,kargs為空dict類型
test3(1, b=2) #args在函數體內部為tuple類型,kargs為dict類型
test3(a=1, b=2) #args在函數體內部為空tuple類型,kargs為dict類型
錯誤調用:
test3(a=1, 2) #SyntaxError: non-keyword arg after keyword arg
4. 其他形式1
def test4(a = ()): print('################test4################') print(type(a)) print(a)
正確調用:
test4((1, 2)) #a在函數體內部為tuple類型
test4(a=(1, 2)) #a在函數體內部為tuple類型
test4((1,)) #a在函數體內部為tuple類型
test4(a=(1,)) #a在函數體內部為tuple類型
test4((1)) #a在函數體內部為int類型,非tuple類型
test4(a=(1)) #a在函數體內部為int類型,非tuple類型
test4(1) #a在函數體內部為int類型,非tuple類型
test4(a=1) #a在函數體內部為int類型,非tuple類型
錯誤調用:
test4(1, 2) #TypeError: test4() takes at most 1 argument (2 given)
test4(1, b=2) #TypeError: test4() got an unexpected keyword argument 'b'
test4(a=1, b=2) #TypeError: test4() got an unexpected keyword argument 'b'
5. 其他形式2
def test5(b = {}): print('################test5################') print(type(b)) print(b)
正確調用:
test5({'a':2}) #b在函數體內部為dict類型
test5(b={'a':2})
test5({'a':2,'b':3})#b在函數體內部為dict類型
test5(b={'a':2,'b':3})
test5(b=2) #b在函數體內部為int類型,非dict類型
錯誤調用:
test5(a=1, b=2) #TypeError: test5() got an unexpected keyword argument 'a'
test5(1, 2) #TypeError: test5() takes at most 1 argument (2 given)
test5(1, b=2) #TypeError: test5() got multiple values for keyword argument 'b'
6. 其他形式3
def test6(a = (), b = {}): print('################test6################') print(type(a)) print(a) print(type(b)) print(b)
正確調用:
test6(1, 2)
test6(a=1, b=2)
test6(a=1, b=2)
test6((1, 2), {'c':8})
test6({'c':8})
test6(b={'c':8})
test6((1, 2), b=2)
test6((1, 2), b=2)
錯誤調用:
test6(a=1, 2) #SyntaxError: non-keyword arg after keyword arg
test6(1, 2, b=2) #TypeError: test6() got multiple values for keyword argument 'b'
關於不定參數函數中使用傳入參數調用其他固定參數函數的使用請移駕至:http://www.cnblogs.com/doudongchun/p/3704123.html