python 函数参数

来源:互联网 发布:花生壳的域名ping不通 编辑:程序博客网 时间:2024/05/18 02:33
'''函数参数匹配表func(value)        调用者    常规参数:通过位置进行匹配func(name=value)   调用者    关键字参数:通过变量名匹配func(*sequence)    调用者    以name传递所有的对象,并作为独立的基于位置的参数func(**dict)       调用者    以name成对的传递所有的关键字/值,并作为独立的关键字参数def func(name)           函数      常规参数:通过位置或者变量名进行匹配def func(name=value)     函数      默认参数值,如果没有在调用中传递的话def func(*name)          函数      匹配并收集(在元祖中)所有包含位置的参数def func(**name)         函数      匹配并收集(在字典中)所有包含位置的参数def func(*args,name)    函数      参数必须在调用中按照关键字传递def func(*, name=value)  函数      (python 3.0)'''#关键字参数和默认参数def f(a,b,c):    print(a,b,c)f(1,2,3)    #按照位置1赋值给a,2赋值给b,3赋值给cdef f1(a=1,b=2,c=3):    print(a,b,c)f1(4,5,6)   #按照位置4赋值给a,5赋值给b,6赋值给cf1(b=22,c=33,a=11)   #关键字参数不根据位置赋值,直接通过变量名赋值f1(111,222,c=333)   #先按照位置赋值,然后关通过变量名赋值def f3(a,b=2,c=3):    print(a,b,c)f3(1)   #按照位置1赋值给a,b默认值2,c默认值3f3(11,22)    #按照位置11赋值给a,22赋值给b,c默认值3f3(11,22,33)    #按照位置11赋值给a,22赋值给b,33赋值给cf3(11,c=22)    #按照位置11赋值给a,22赋值给c,b默认值2#任意参数def f4(*args):    print(args)f4(1)f4(1,2,3,4)    #将参数收集到一个元组中,并将这个元组赋值给变量argsdef f5(**args):    print(args)f5(a=1,b=2)    #将参数收集到一个字典中,并将这个字典赋值给变量argsdef f6(a, b=1, *c, **d):    print(a,b,c,d)f6(1,2,3,4,5,d=6,e=7,f=8)   #1赋值给a,2赋值给b,(3,4,5)赋值给c,{'d':6,'e':7,'f':8}赋值给ddef f7(*args):    for i in args:        print(i)f7(open('e:/kangyujiao/test.txt').readlines())#解包参数def f6(a,b,c,d):    print(a,b,c,d)args=(1,2,3,4)f6(*args)   #通过一个元组给一个函数传递多个参数args={'a':1,'b':2,'c':3,'d':4}f6(**args)   #通过一个字典给一个函数传递多个参数f6(*(1,2),**{'c':3,'d':4})f6(1,*(2,3),**{'d':4})f6(1,c=3,*(2,),**{'d':4})f6(1,*(2,3),d=4)f6(1,*(2,),c=3,**{'d':4})f6(*open('e:/kangyujiao/test.txt'))
#keyword-only参数#即必须只按照关键字传递并且不会由一个位置参数来填充的参数#keyword-only参数编码为命名的参数,出现在参数列表中的*args和*之后,所以这些参数都必须在调用中使用关键字语法来传递def kwonly(a, *b, c):    print(a,b,c)kwonly(1,2,c=3)    #1,2,3kwonly(a=1,c=3)    #1 () 3#kwonly(1,2,3)   #异常TypeError: kwonly() missing 1 required keyword-only argument: 'c'#我们也可以在参数列表中使用一个*字符,来表示一个函数不会接受一个变量长度的参数列表def kwonly2(a,*,b,c):    print(a,b,c)kwonly2(1,c=3,b=2)    #1 2 3kwonly2(c=3,b=2,a=1)    #1 2 3#kwonly2(1,2,3)     #TypeError: kwonly2() takes 1 positional argument but 3 were given#kwonly2(1)    #TypeError: kwonly2() missing 2 required keyword-only arguments: 'b' and 'c'def kwonly3(a,*,b='spam',c='ham'):    print(a,b,c)kwonly3(1)    #1 spam hamkwonly3(1,c=3)    #1 spam 3kwonly3(a=1)    #1 spam hamkwonly3(c=3,b=2,a=1)    #1 2 3#kwonly3(1,2)    #TypeError: kwonly3() takes 1 positional argument but 2 were givendef kwonly4(a,*,b,c='ham'):    print(a,b,c)kwonly4(1,b='eggs')    #1 eggs ham#kwonly4(1,c='eggs')    #TypeError: kwonly4() missing 1 required keyword-only argument: 'b'#kwonly4(1,2)    #TypeError: kwonly4() takes 1 positional argument but 2 were givendef kwonly5(a,*,b=1,c,d=2):    print(a,b,c,d)kwonly5(3,c=4)    #3 1 4 2kwonly5(3,c=4,b=5)    #3 5 4 2#kwonly5(1,2,3)   #TypeError: kwonly5() takes 1 positional argument but 3 were givendef kwonly6(a,*b,c=8,**d):    print(a,b,c,d)kwonly6(1,2,3,c=4,x=5,y=6)   #1 (2, 3) 4 {'x': 5, 'y': 6}kwonly6(1,2,3,x=4,y=5,c=7)   #1 (2, 3) 7 {'x': 4, 'y': 5}def kwonly7(a,b=6,*c,**d):    print(a,b,c,d)kwonly7(1,2,3,4,x=5,y=6)    #1 2 (3, 4) {'x': 5, 'y': 6}kwonly7(1,2,x=5,y=6)    #1 2 () {'x': 5, 'y': 6}#当传递keyword-only参数的时候,他们必须出现在一个**args形式之前,keyword-only参数可以编写在*args之前或者之后,并且可能包含在**args中def f(a,*b,c=6,**d):    print(a,b,c,d)f(1,*(3,4),x=4,y=5)    #1 (3, 4) 6 {'x': 4, 'y': 5}f(1,*(3,4),**dict(x=4,y=5))    #1 (3, 4) 6 {'x': 4, 'y': 5}f(1,*(3,4),c=7,**dict(x=4,y=5))    #1 (3, 4) 7 {'x': 4, 'y': 5}f(1,*(3,4),c=7,**dict(x=4,y=5))    #1 (3, 4) 7 {'x': 4, 'y': 5}f(1,*(2,3),**dict(x=4,y=5,c=7))    #1 (2, 3) 7 {'x': 4, 'y': 5}

原创粉丝点击