Python可变参数
使用 *args 接收任意数量的位置参数,增强函数灵活性。
基本语法
定义可变参数
Python
def sum_all(*args):
return sum(args)
# 调用示例
print(sum_all(1, 2, 3)) # 6
print(sum_all(1, 2, 3, 4, 5)) # 15
print(sum_all()) # 0
args 本质是元组
Python
def show_args(*args):
print(type(args)) # tuple
print(args)
show_args(1, 2, 3) # tuple: (1, 2, 3)
混合使用
与固定参数组合
Python
def greet(prefix, *names):
for name in names:
print(f"{prefix}, {name}!")
greet("Hello", "Alice", "Bob", "Charlie")
# Hello, Alice!
# Hello, Bob!
# Hello, Charlie!
参数顺序规则
Python
# 位置参数 → *args → 默认参数 → **kwargs
def func(a, b, *args, c=10):
print(f"a={a}, b={b}, args={args}, c={c}")
func(1, 2, 3, 4, 5) # a=1, b=2, args=(3, 4, 5), c=10
func(1, 2, 3, 4, c=20) # a=1, b=2, args=(3, 4), c=20
参数解包
列表/元组解包为位置参数
Python
def sum_all(*args):
return sum(args)
numbers = [1, 2, 3, 4, 5]
print(sum_all(*numbers)) # 15,使用 * 解包
# 等价于
print(sum_all(1, 2, 3, 4, 5)) # 15
元组解包
Python
values = (10, 20, 30)
print(sum_all(*values)) # 60
实际应用
数学运算
Python
def multiply(*numbers):
result = 1
for n in numbers:
result *= n
return result
print(multiply(2, 3, 4)) # 24
查找极值
Python
def find_max(*numbers):
if not numbers:
return None
return max(numbers)
print(find_max(3, 7, 2, 9, 1)) # 9
日志记录
Python
def log_message(level, *messages):
full_message = " ".join(messages)
print(f"[{level}] {full_message}")
log_message("INFO", "User", "logged", "in")
# [INFO] User logged in
函数包装器
Python
def wrapper(func, *args):
print(f"Calling with args: {args}")
return func(*args)
wrapper(print, "Hello", "World")
# Calling with args: ('Hello', 'World')
# Hello World
注意事项
不能直接修改 args
Python
def modify_args(*args):
# args 是元组,不可修改
# args[0] = 100 # TypeError
# 可以转换为列表
args_list = list(args)
args_list[0] = 100
return args_list
获取单个参数
Python
def process(*args):
if args:
first = args[0] # 获取第一个
last = args[-1] # 获取最后一个
return first, last
return None, None
print(process(1, 2, 3, 4)) # (1, 4)
要点总结
*args接收任意数量位置参数,形成元组- 调用时使用
*解包列表/元组为独立参数 - 固定参数放在
*args之前 args是元组,不可直接修改- 常用于聚合处理、函数包装等场景
📝 发现内容有误?点击此处直接编辑