函数参数类型 #
Python函数支持多种参数类型,提供了极大的灵活性。
一、位置参数 #
位置参数是最基本的参数类型,按位置顺序传递。
python
def greet(name, message):
print(f"{message}, {name}!")
greet("Tom", "Hello") # Hello, Tom!
二、关键字参数 #
关键字参数通过参数名指定,顺序可以任意。
python
def greet(name, message):
print(f"{message}, {name}!")
greet(name="Tom", message="Hello") # Hello, Tom!
greet(message="Hi", name="Jerry") # Hi, Jerry!
# 混合使用:位置参数必须在前
greet("Tom", message="Hello") # 正确
# greet(name="Tom", "Hello") # 错误
三、默认参数 #
python
def greet(name, message="Hello"):
print(f"{message}, {name}!")
greet("Tom") # Hello, Tom!
greet("Tom", "Hi") # Hi, Tom!
greet("Tom", message="Hey") # Hey, Tom!
注意:默认参数的陷阱
python
# 错误:使用可变对象作为默认值
def add_item(item, items=[]):
items.append(item)
return items
print(add_item(1)) # [1]
print(add_item(2)) # [1, 2] - 不是预期的[2]!
# 正确:使用None作为默认值
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
四、可变位置参数 (*args) #
python
def add(*numbers):
return sum(numbers)
print(add(1, 2, 3)) # 6
print(add(1, 2, 3, 4)) # 10
# args是元组
def print_args(*args):
print(type(args)) # <class 'tuple'>
for arg in args:
print(arg)
# 与普通参数结合
def greet(greeting, *names):
for name in names:
print(f"{greeting}, {name}!")
greet("Hello", "Tom", "Jerry", "Alice")
五、可变关键字参数 (**kwargs) #
python
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Tom", age=25, city="Beijing")
# kwargs是字典
def get_info(**kwargs):
return kwargs
info = get_info(name="Tom", age=25)
print(info) # {'name': 'Tom', 'age': 25}
六、参数顺序 #
参数定义的顺序必须是:
- 位置参数
- 默认参数
- *args
- 仅关键字参数
- **kwargs
python
def function(a, b, c=3, *args, d=4, e, **kwargs):
print(f"a={a}, b={b}, c={c}")
print(f"args={args}")
print(f"d={d}, e={e}")
print(f"kwargs={kwargs}")
# Python 3.8+: 仅位置参数
def func(a, b, /, c, d, *, e, f):
pass
# a, b: 仅位置
# c, d: 位置或关键字
# e, f: 仅关键字
七、仅位置参数 (Python 3.8+) #
python
def greet(name, /, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Tom") # 正确
greet("Tom", "Hi") # 正确
# greet(name="Tom") # 错误:不能作为关键字
八、仅关键字参数 #
python
def greet(*, name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet(name="Tom") # 正确
greet(name="Tom", greeting="Hi") # 正确
# greet("Tom") # 错误:必须使用关键字
九、参数解包 #
python
def add(a, b, c):
return a + b + c
# 列表/元组解包
numbers = [1, 2, 3]
print(add(*numbers)) # 6
# 字典解包
params = {"a": 1, "b": 2, "c": 3}
print(add(**params)) # 6
十、总结 #
| 参数类型 | 语法 | 示例 |
|---|---|---|
| 位置参数 | name |
def f(a, b): |
| 默认参数 | name=default |
def f(a=1): |
| 可变位置 | *args |
def f(*args): |
| 可变关键字 | **kwargs |
def f(**kwargs): |
| 仅位置参数 | / |
def f(a, /): |
| 仅关键字参数 | * |
def f(*, a): |
最后更新:2026-03-16