什么是形参?
什么是实参
注意点
实参值(变量值)与形参(变量名)的绑定关系只在函数调用的时才会生效\绑定,当函数调用结束后,立刻解除绑定
什么是位置参数
1位置形参(定义时)调用时必须为其传值,不能多不能少
2位置实参(调用时)实参和形参要一一对应
def foo(x,y,z)
foo(1,2,3)
什么是关键字参数
调用时,按key=value 形式定义的实参
注意点
指名道姓地为形参传值,意味着即使不按顺序定义,仍能为指定的参数传值
def foo(1,a=2)
foo(1,a=2)
调用函数时,位置实参和关键字实参可以混合使用但必须
例子:
def foo(x,y,z):
print(x,y,z)
1.遵循形参的规则
foo (1,z=3,y=2) #正确
foo(1,z=3) #报错
2.不能为同一个形参重复传值
foo(1.x=1,y=1,z=2) #报错
3.位置实参必须放到关键字实参的前面
foo(y=3,z=2,1) #报错
什么是默认参数
定义阶段,已为某个形参赋值
注意点
1.定义阶段已有值,调用阶段可以不传值
def foo(x,y,z=1)
print(x,y)
2.位置形参必须在默认参数的前面
def foo(y=1,x) #报错
3.默认参数的值只在定义阶段的赋值一次,也就是说默认参数的值在定义阶段就被固定死了
m=10
def foo(x,y=m)
print(x,y)
m='abc'
foo(1) ==>1 10
foo(1,11) ==>1 11
4记住:默认参数的值该设置为不可变类型
应用:
对于经常需要变化的值,需要将对于的形参对于成位置形参
对于大多数情况值都一样的情况,需要将对应的形参定义成默认参数
可变长度参数
def foo(x,y,z,*args,**kwargs)
foo(x,y,z,*args,**kwargs)
foo(1,2,3,4,5,6,a=1,b=2,c=3)
其中4,5,6被*接收,赋值给zrgs,返回的类型是元组
其中a=1,b=2,c=3被**接收,赋值给kwargs,返回的类型是字典
打散
*能用在形参里也能用在实参里
foo(*(4,5,6),**{'a'=1,'b'=2,'c'=3})==>foo(4,5,6,a=1,b=2,c=3)