您的位置:首页 > 编程语言 > Python开发

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

2016-02-23 00:00 1886 查看
摘要: python解析器解析函数参数的一般原则

Python中函数的参数主要追寻两大类参数,位置参数和关键字参数
关键字参数才有默认值,位置参数没有默认值
解析原则:

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

非任意数量位置参数可以通过关键字参数传值,任意数量位置参数不能通过关键字参数传值

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

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

任意数量关键字参数放在所有类型参数的后面
一:非任意数量位置参数或关键字参数

1.纯位置参数,就是多个参数间的相对位置,如:
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}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数参数 python