二、形参与实参的具体使用
# 2.1、位置参数:在函数定义阶段,按照从左到右的顺序依次定义的参数称之为位置参数
# 位置形参:按照从左到右的顺序直接定义的"变量名"
# 特点:吸引被传值,多一个不行少一个不行
def func(x, y):
print(x, y)
# 位置实参:按照从左到右的顺序依次传入的值
# 特点L按照顺序与形参一一对应
func(1, 2)
# ==================================================
# 2、2关键字参数
def func(x, y):
print(x, y)
# 关键字实参:在调用阶段,按照key=value的形式传入的值
# 特点:指名道姓给某个形参传值,可以完全不参照顺序
# foo(y=222,x=111)
# 混合使用,强调
# 1、位置实参必须放置关键字实参前
func(1, y=2)
# 2、不能为同一个形参重复传值
# func(1, y=2, x=2)
# ==================================================
# 2.3、默认参数
# 默认形参:在定义函数阶段吗,就已经被赋值的形参,称之为默认参数
# 特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值(但是还是可以改)
# 位置形参与默认形参的混用
# ①、位置形参必须要在默认形参的左边
def func(x, y=1):
print(x, y)
# ②、默认参数的值是在函数定义阶段被赋值的,准确地说被赋值的内存地址
m = [111, ]
# ③、虽然默认值可以被指定为任意数据类型,但不推荐使用可变类型(变量)
# 函数理想状态:函数的调用只跟函数的本身有关系,不受外界代码的影响
def fooo(x, y, z, l=None):
if l is None:
l = []
l.append(x)
l.append(y)
l.append(z)
print(l)
函数参数总结:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/332b1ad7e164f87bd94fe12d2b3cf5f9.png)
2.4、可变长度的参数(*与**的用法)
# 可变长度指的是再调用函数时,传入的值(实参)的个数不固定
# 而实参是用来为形参赋值的,所有对应着,针对溢出的实参必须有对应的形参来接受
# 2.4.1、可变长度的位置参数
# ①:*形参名:用来接受溢出的位置实参,溢出的位置实参会被*保存成元组的格式,然后赋值紧跟其后
# *后跟的可以是任何名字,规范名为args
def func(x, y, *args): # args = (3,4,5,6)
print(x, y, args)
func(1, 2, 3, 4, 5, 6)
# ②:*可以用在实参中,实参中带*,将*后的值打散成位置实参
def func(x, y, z):
print(x, y, z)
print(*[11, 22, 33]) # func(11,22,33)
# ③:形参与实参中都带*
def func(x, y, *args): # args = (3,4,5,6)
print(x, y, args)
func(1, 2, *[3, 4, 5, 6]) # func(1,2,3,4,5,6)
# 2.4.2、可变长度的关键字参数
# ①:**形参名:用来接受溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名
# *后跟的可以是任何名字,规范名为**kwargs
def func(x, y, **kwargs): # kwargs = {a:111, b:222, c:333}
print(x, y, kwargs)
func(1, y=2, a=111, b=222, c=333)
# ②:**可以用在实参中(**后跟的是字典),实参中带**,先**后的值打散成关键字实参
def func(x, y, z):
print(x, y, z)
print(**{'x': 1, 'y': 2, 'z': 3}) # func(x=1,y=2,z=3)
# ③:形参与实参中都带**
def func(x, y, **kwargs): # kwargs = (3,4,5,6)
print(x, y, kwargs)
func(**{'y': 222, 'x': 111, 'aaa': 999, 'bbb': 000}) # func(y=222,x=111,aaa=999,bbb=000)
# ==================================================
# 混用*与**:*args必须在**kwargs之前
def func(x, *args, **kwargs):
print(args)
print(kwargs)
func(1, 2, 3, 4, 5, 6, x=1, y=2, z=3)