Python学习之基础语言篇——函数参数详解

Python中函数的参数主要追寻两大类参数,位置参数和关键字参数python

关键字参数才有默认值,位置参数没有默认值web

解析原则:函数

  1. 定义和调用函数中位置参数应该放在关键字参数的前面code

  2. 非任意数量位置参数能够经过关键字参数传值,任意数量位置参数不能经过关键字参数传值orm

  3. 任意数量位置参数后面必须接关键字参数(定义函数或函数传值)编译器

  4. 任意数量位置参数和任意数量关键字参数只能在定义中定义一次。it

  5. 任意数量关键字参数放在全部类型参数的后面编译

    一:非任意数量位置参数或关键字参数class

     1.纯位置参数,就是多个参数间的相对位置,如:webkit

 def f(arge1,arge2,arge3,arge4):
     print(arge1,arge2,arge3,arge4)
     pass
 f(1,'a',3,4)#将输出1,a,3,4
 f(1,2,arge3=2,arge4=4)#将输出1,2,2,4
 #必须为4个参数,下面几种方式都会调用失败
 f(1)
 f(1,'a')
 f(1,'a',3)
 f(1,arge2=2,3,4)#违背了解析原则1

   2.纯关键字参数,实际上就是参数的赋值,引伸为参数设置默认值,如:

 def f(arge1=1,arge2=2,arge3=3,arge4=4):
     print(arge1,arge2,arge3,arge4)
     pass
 f()#将输出1,2,3,4
 f(3)#将输出3,2,3,4
 f(arge3=3)#将输出1,2,3,4
 f(2,arge3=3)#将输出2,2,3,4
 #下面几种方式都会调用失败,违背了解析原则1
 f(arge3=3,3)

   3.位置参数与关键字参数混搭,位置参数通常放在关键字参数前面,如:

def f(arge1,arge2,arge3,arge4=3):
    print(arge1,arge2,arge3,arge4)
    pass
f(1,2,3,4)#将输出1,2,3,4
f(1,2,3)#将输出1,2,3,3
f(1,2,arge3=2,arge4=2)#将输出1,2,2,2
f(1,2,arge3=3)#将输出1,2,3,3
#下面几种方式都会调用和定义失败,违背了解析规则1
f(1,arge2=2,3)
f(1,arge2=2,3,arge4=3)
def f(arge1,arge2,arge3=3,arge4):
    print(arge1,arge2,arge3,arge4)
    pass

二:任意数量位置参数或关键字参数

    1.任意数量位置参数,解析器通常将其包装为list或tuple,在参数前面加“*”表示,如:

 def f(arge1,*arge2,arge3):
     print(arge1,arge2,arge3)
     pass
 f(1,*(2,2),arge3=3)#将输出1,(2,2),3
 f(1,(2,2),arge3=3)#将输出1,((2,2),),3
 def ff(arge1,arge2,*arge3):
     print(arge1,arge2,arge3)    
     pass 
 ff(1,2,*(2,2))#将输出1,2,(2,2)
 #下面几种方式都会调用或定义失败
 f(1,*(2,2),3)#违背解析原则3
 f(arge1=1,*(2,2),arge3=3)#违背解析原则1
 f(1,arge2=(2,2),arge3=3)#违背了解析原则2
 def f(arge1,*arge2,*arge3):#违背了解析原则4
     print(arge1,arge2,arge3)
     pass

    2.任意数量关键字参数,编译器通常将其包装为dict,在参数前面加“**”表示,如:

def f(arge1,*arge2,**arge3):
    print(arge1,arge2,arge3)    
    pass 
f(1,3,2,4,y=2,x=1)将输出1,(3,2,4),{'x':1,'y':2}
#下面几种函数定义方式都会失败
#违背了解析原则5
def f1(arge1,**arge2,*arge3):
    print(arge1,arge2,arge3)    
    pass
def f2(arge1,**arge2,arge3):
    print(arge1,arge2,arge3)    
    pass
def f3(arge1,**arge2,arge3=4):
    print(arge1,arge2,arge3)    
    pass

三:混搭例子:

def f(arg1, arg2='hello', *args, **kwargs):
    print(arg1, arg2, args, kwargs)
f(1,3,3)#将输出1,'hello',(3,3),{}
f(1,x=1)#将输出1,'hello',(),{'x':1}
相关文章
相关标签/搜索