Python 函数参数 *arg 和**kwargs 的区别级使用

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在 Python 中,*args**kwargs 用于函数的可变参数,可以让函数接受 任意数量 的参数,提供更大的灵活性。


1. *args:可变位置参数

  • *args 允许函数接受 任意数量位置参数(positional arguments)。
  • 传入的参数会被打包元组(tuple)

示例 1:使用 *args 传递多个参数

def add_numbers(*args):
    return sum(args)

print(add_numbers(1, 2, 3))  # 输出:6
print(add_numbers(10, 20, 30, 40))  # 输出:100

解释:

  • add_numbers(1, 2, 3) 实际上等价于 add_numbers((1, 2, 3))
  • args 在函数内部是一个元组args = (1, 2, 3)

示例 2:*args 结合普通参数

def greet(message, *names):
    for name in names:
        print(f"{message}, {name}!")

greet("Hello", "Alice", "Bob", "Charlie")
# 输出:
# Hello, Alice!
# Hello, Bob!
# Hello, Charlie!

解释:

  • message 是普通参数,必须提供
  • *names 是可变参数,接收所有额外的参数,存为元组

2. **kwargs:可变关键字参数

  • **kwargs 允许函数接受 任意数量关键字参数(key-value 对)。
  • 传入的参数会被打包字典(dict)

示例 1:使用 **kwargs 传递多个关键字参数

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=25, city="New York")
# 输出:
# name: Alice
# age: 25
# city: New York

解释:

  • kwargs 在函数内部是一个字典kwargs = {'name': 'Alice', 'age': 25, 'city': 'New York'}

示例 2:**kwargs 结合普通参数

def introduce(name, **info):
    print(f"My name is {name}.")
    for key, value in info.items():
        print(f"My {key} is {value}.")

introduce("Alice", age=25, city="New York", hobby="reading")
# 输出:
# My name is Alice.
# My age is 25.
# My city is New York.
# My hobby is reading.

3. *args**kwargs 结合使用

可以在同一个函数中同时使用 *args**kwargs,但顺序必须是:

  1. 普通参数
  2. *args
  3. **kwargs
def demo_function(a, b, *args, **kwargs):
    print(f"a = {a}, b = {b}")
    print(f"args = {args}")
    print(f"kwargs = {kwargs}")

demo_function(1, 2, 3, 4, 5, name="Alice", age=25)
# 输出:
# a = 1, b = 2
# args = (3, 4, 5)
# kwargs = {'name': 'Alice', 'age': 25}

解释:

  • a, b 是普通参数。
  • *args 接收 (3, 4, 5) 作为元组
  • **kwargs 接收 {'name': 'Alice', 'age': 25} 作为字典

4. *args**kwargs 用于函数参数解包

(1)用 *args 传递列表或元组

def sum_numbers(a, b, c):
    return a + b + c

nums = [1, 2, 3]
print(sum_numbers(*nums))  # 输出:6

解释

  • *nums 解包 列表 [1, 2, 3],相当于 sum_numbers(1, 2, 3)

(2)用 **kwargs 传递字典

def show_info(name, age, city):
    print(f"Name: {name}, Age: {age}, City: {city}")

person = {"name": "Alice", "age": 25, "city": "New York"}
show_info(**person)
# 输出:
# Name: Alice, Age: 25, City: New York

解释

  • **person 解包 字典 {"name": "Alice", "age": 25, "city": "New York"},相当于 show_info(name="Alice", age=25, city="New York")

5. *args vs **kwargs 的区别

对比项*args**kwargs
接收参数类型位置参数(1, 2, 3)关键字参数{"name": "Alice"}
存储数据类型元组(tuple)字典(dict)
参数传递方式func(1, 2, 3)func(name="Alice", age=25)
适用场景传递 多个值传递 多个键值对

6. 总结

用法作用示例
*args处理可变数量的位置参数def foo(*args): print(args)
**kwargs处理可变数量的关键字参数def foo(**kwargs): print(kwargs)
*args**kwargs同时使用,接收任意参数def foo(a, *args, **kwargs): ...
*args 进行列表/元组解包func(*[1, 2, 3])func(1, 2, 3)
**kwargs 进行字典解包func(**{"x": 1, "y": 2})func(x=1, y=2)

*args 处理多个位置参数,存储为元组
**kwargs 处理多个关键字参数,存储为字典
两者可结合使用,提供灵活参数传递方式

掌握 *args**kwargs,让 Python 代码更灵活!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值