全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 6 分钟 ✍️ juanwangdev

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)

要点总结

  1. *args 接收任意数量位置参数,形成元组
  2. 调用时使用 * 解包列表/元组为独立参数
  3. 固定参数放在 *args 之前
  4. args 是元组,不可直接修改
  5. 常用于聚合处理、函数包装等场景

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python变量作用域
下一篇 → Python返回值与多返回值
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库