Python-函数传参格式
Python 中参数传递本质是传递对象的引用。
- 修改可变对象(如列表)会影响外部变量。
- 重新赋值不会影响外部变量(因为引用指向了新对象)。
在 Python 中,当传递不可变对象(如整数、字符串、元组等)作为参数时,函数内部对参数的修改不会影响外部变量。这是因为不可变对象本身无法被就地修改,所有的“修改”操作都会生成新的对象,而外部的变量依然指向原来的对象。
基本参数类型
-
位置参数
1
2
3
4def func(a, b, c):
print(a, b, c)
func(1, 2, 3) # 输出: 1 2 3 -
关键字参数:通过关键字可以不按照位置
1
func(b=2, a=1, c=3) # 输出: 1 2 3
-
默认参数
1
2
3
4
5def func(a, b=0):
print(a + b)
func(5) # 输出: 5 (b使用默认值0)
func(5, 3) # 输出: 8
可变长度参数
-
任意数量位置参数(
*args
): 接受多个位置参数,打包成元祖1
2
3
4def func(*args):
print(args)
func(1, 2, 3) # 输出: (1, 2, 3) -
任意数量关键字参数(
**kwargs
): 接收多个关键字参数,打包为字典1
2
3
4def func(**kwargs):
print(kwargs)
func(a=1, b=2) # 输出: {'a': 1, 'b': 2}
参数组合规则
-
必须遵循如下顺序:
位置参数 -> 默认参数 ->
*args
-> 仅关键字参数 ->**kwargs
1
2
3
4
5def func(a, b=0, *args, c, d=1, **kwargs):
print(a, b, args, c, d, kwargs)
func(1, 2, 3, 4, c=5, d=6, e=7)
# 输出: 1 2 (3,4) 5 6 {'e': 7} -
强制关键字参数(使用
*
分割)在
*
符号之后的参数必须使用关键字传递1
2
3
4
5def func(a, *, b):
print(a, b)
func(1, b=2) # 正确
func(1, 2) # 报错:takes 1 positional argument but 2 were given
参数解包(调用时)
-
解包可迭代对象(
*
)1
2
3
4
5def func(a,b,c):
print(a,b,c)
args = [1,2,3]
func(*args) ## 等价于 func(1, 2, 3), 输出 1,2,3 -
解包字典(
**
)1
2kwargs = {'a':1, 'b':2, 'c':3}
func(**kwargs) ## # 等价于 func(a=1, b=2, c=3), 输出 1,2,3
Python-函数传参格式
https://jackiedai.github.io/2025/03/18/011Python/006Python-函数传参格式/