Python 函数参数的类型与使用技巧
在 Python 中,函数支持多种参数形式,主要包括位置参数、默认值参数、可变参数和关键字参数。这些参数类型可以灵活组合,满足不同场景下的需求。
位置参数
位置参数是最基本的参数类型,调用时必须按顺序传入对应值。例如:
def calculate(a, b):
print(f"a = {a}, b = {b}")
return a + b
print(calculate(4, 5)) # 输出: 9
默认值参数
在定义函数时为参数指定默认值,若调用时不提供该参数,则使用默认值。默认值参数必须位于所有非默认参数之后。
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # 输出: Hello, Alice!
greet("Bob", "Hi") # 输出: Hi, Bob!
注意:若尝试将默认参数置于非默认参数之前,会触发语法错误。
可变参数(*args)
使用 * 可以接收任意数量的位置参数,它们会被打包成一个元组。
def collect_values(*args):
print(type(args)) # <class 'tuple'>
print(args) # (1, 2, 3, 4)
collect_values(1, 2, 3, 4)
常见命名约定为 *args。此外,可通过 * 对列表或元组进行拆包,使其元素作为独立参数传递:
numbers = [1, 2, 3]
collect_values(*numbers) # 等价于 collect_values(1, 2, 3)
关键字参数(**kwargs)
通过 ** 接收任意数量的关键字参数,形成一个字典。
def display_options(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
display_options(color="red", size="large")
# 输出:
# color: red
# size: large
标准命名习惯为 **kwargs。同样,可使用 ** 拆包字典来传递关键字参数:
settings = {"theme": "dark", "font_size": 12}
display_options(**settings)
命名关键字参数
通过在参数列表中加入 *,可以限定后续参数只能以关键字形式传入,增强接口清晰度。
def configure_server(port, *, debug=False, timeout=30):
print(f"Port: {port}, Debug: {debug}, Timeout: {timeout}")
configure_server(8080, debug=True) # 正确
configure_server(8080, True) # 报错:不能以位置方式传入 debug
参数拆包的应用
在函数调用时,* 和 ** 可用于拆包容器对象:
*用于拆解列表、元组等序列,将其元素作为独立参数传递。**用于拆解字典,将其键值对转换为关键字参数。
data = [1, 2, 3]
params = {'x': 10, 'y': 20}
def add(x, y): return x + y
print(add(*data)) # 相当于 add(1, 2, 3) → 错误:参数过多
print(add(**params)) # 相当于 add(x=10, y=20) → 正确
正确使用拆包能提升代码灵活性与复用性,尤其适用于装饰器、配置封装等高级场景。
