一、位置参数
调用函数时根据函数定义的参数位置传递参数,传递的参数和定义的参数的顺序必须一致。
示例:
def info(name, age):
print(f"姓名:{name},年龄:{age}")
# 按顺序传参 info("张三", 20)
特点:
-
实参和形参数量、顺序必须一致
-
最简单、最常用
二、关键字参数
函数调用时通过“健=值”形式传递参数。
作用: 可以让函数更加清晰、容易使用,同时也清除了函数的顺序要求。
注意: 函数如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
示例:
def info(name, age):
print(f"姓名:{name},年龄:{age}")
# 关键字传参,顺序无关
info(age=20, name="张三")
特点
- 不用记顺序
- 可读性极高
- 可以和位置参数混用,但位置参数必须在前
三、缺省参数(默认参数)
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用。
作用: 当调用函数时没有传递参数,就会使用默认时缺省函数对应的值。
示例:
def info(name, age=18): # age 默认 18
print(f"姓名:{name},年龄:{age}")
info("张三") # 用默认值 → 18
info("李四", 25) # 覆盖默认值 → 25
注意
- 默认值可以为多个参数设置
- 默认参数必须放在非默认参数后面
- 默认值只在函数定义时计算一次(不要用可变对象做默认值)
- 当调用时,如果缺省函数传值则修改默认参数值,否则使用这个默认值。
四、不定长参数(可变位置参数)
用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
作用: 当当调用函数时不确定参数的个数时,可以使用不定长参数。
不定长参数的类型:
- 位置传递:
def user_info (*args):
print(args)
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型,这就是位置传递
- 关键字传递
def user_info(**kwargs):
print(kwargs)
参数是“键=值”形式的情况下,所有的“键=值”都会被kwargs接受,同时根据“键=值”组成字典。
五、总结
| 传参方式 | 写法 | 接收形式 | 特点 |
|---|---|---|---|
| 位置参数 | func(1,2) | 顺序对应 | 最基础 |
| 关键字参数 | func(a=1,b=2) | 键值对 | 顺序无关 |
| 默认参数 | def func(a=10) | 带默认值 | 可传可不传 |
| 可变位置 | *args | 元组 | 任意多个位置参数 |
| 可变关键字 | **kwargs | 字典 | 任意多个关键字参数 |