#形参:在定义阶段括号内指定的参数,相当于变量名
#实参:在调用阶段括号你传人的值称之为实参,相当于值
#在调用阶段,实参的值会绑定给形参,在调用结束后解除绑定
def foo(x,y): # x=1 y=2 print(x,y) foo(1,2)
#在python中参数的分类:
#1.位置参数:按照从左到右的顺序依次定义的参数
#位置形参:必须被传值,多一个少一个都不行
#位置实参:与形参一一对应传值
#2关键字参数:在函数调用时,按照key=value 的形式定义的实参
#特点:指名道姓的给形参传值,不在依赖与位置
def foo(name,age,sex) print(name,age,sex) foo(sex='male',age=18,name='agon')
#关键字实参和位置实参的混用注意点:
#1)关键字实参必须在位置参数的后面
#2)不能被同一个参数赋值多次
#3默认参数:在函数定义阶段,就已经为形参赋值了
#特点:定义阶段已经有 值意味着调用阶段可以不用传值
def foo(x,y=1): print(x,y)
#注意:
#1)默认参数必须放到位置形参后面
def register(name,sex='nale',age): print(name,age,sex)
#2)默认参数的值只在定义时被赋值一次
#3)默认参数值通常应该时不可变类型
res = 1 def foo(x,y=res): print(x,y) res = 10 foo("aaa")
#4可变长参数,在调用函数时,实参值的个数不固定
#实参的形式有,位置实参和关键字实参
#形参的解决方案:*,**
#*args的用法 def foo(x,y,*z): #z=(3,4,5,6) print(x,y) print(z) #foo(1,2,3,4,5,6) foo(1,2,*[3,4,5,6]) # 两者等价 #**kwargs def foo(x,y,**kwargs) # kwargs ={'c':5,'a':3,'b':4} print(x,y) print(kwargs) foo(y=2,x=1,a=3,b=4,c=5) foo(y=2,**{a=3,b=4,c=5}) # 两者等价
#5命名关键字参数,指的是定义在*后的参数,该参数必须被传值(除非有它的默认值),而且必须按照k=v的形式
def foo(x,y,*,m,n): print(x,y) print(args) print(m,n) foo(1,2,3,n=4,m=3)