Python中args和kwargs用法与区别举例详解

 更新时间:2025年04月26日 10:18:41   作者:_Itachi__  
这篇文章主要介绍了Python中args和kwargs用法与区别的相关资料,*args用于处理非关键字参数,**kwargs用于处理关键字参数,两者都可以在函数中灵活使用,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

大家好,今天我们来聊聊Python中的两个非常强大的特性:*args**kwargs。这两个东西在函数定义中经常出现,但很多初学者对它们的理解还不够深入。今天我们就来彻底搞懂它们的用法和区别,让你在写代码时更加得心应手!

1. 什么是*args和kwargs?**

*args**kwargs是Python中用于函数定义的两种特殊语法,主要用于处理可变数量的参数。它们的名字并不重要(你可以用其他名字代替),但通常约定俗成使用*args**kwargs

  • *args:用于传递可变数量的非关键字参数(位置参数)。
  • **kwargs:用于传递可变数量的关键字参数(键值对参数)。

2. args的使用方法

*args允许你向函数传递任意数量的非关键字参数。这些参数会被打包成一个元组(tuple),在函数内部可以通过args来访问。

2.1 基本用法

def my_function(*args):
    for arg in args:
        print(arg)

my_function(1, 2, 3)

输出

1
2
3

2.2 与其他参数一起使用

*args可以和其他参数一起使用,但必须放在位置参数之后

def my_function(a, b, *args):
    print("a:", a)
    print("b:", b)
    print("args:", args)

my_function(1, 2, 3, 4, 5)

输出

a: 1
b: 2
args: (3, 4, 5)

3. kwargs的使用方法

**kwargs允许你向函数传递任意数量的关键字参数。这些参数会被打包成一个字典(dict),在函数内部可以通过kwargs来访问。

3.1 基本用法

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

my_function(name="Alice", age=25, city="Beijing")

输出

name: Alice
age: 25
city: Beijing

3.2 与其他参数一起使用

**kwargs可以和其他参数一起使用,但必须放在位置参数和*args之后

def my_function(a, b, *args, **kwargs):
    print("a:", a)
    print("b:", b)
    print("args:", args)
    print("kwargs:", kwargs)

my_function(1, 2, 3, 4, name="Alice", age=25)

输出

a: 1
b: 2
args: (3, 4)
kwargs: {'name': 'Alice', 'age': 25}

4. *args和kwargs的区别**

特性*args**kwargs
参数类型非关键字参数(位置参数)关键字参数(键值对参数)
打包形式打包成元组(tuple)打包成字典(dict)
使用场景处理不确定数量的位置参数处理不确定数量的关键字参数
函数调用func(1, 2, 3)func(name="Alice", age=25)
函数定义def func(*args):def func(**kwargs):

5. 实际应用场景

5.1 函数装饰器

在编写装饰器时,*args**kwargs非常有用,因为它们可以处理任意数量和类型的参数。

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before function call")
        result = func(*args, **kwargs)
        print("After function call")
        return result
    return wrapper

@my_decorator
def my_function(a, b):
    return a + b

print(my_function(1, 2))

输出

Before function call
After function call
3

5.2 继承与重写

在类的继承中,*args**kwargs可以用于传递父类的参数。

class Parent:
    def __init__(self, name):
        self.name = name

class Child(Parent):
    def __init__(self, age, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.age = age

child = Child(age=10, name="Alice")
print(child.name, child.age)

输出

Alice 10

6. 注意事项

  • 命名规范

    • *args**kwargs是约定俗成的命名方式,但你可以使用其他名字,比如*numbers**options
  • 顺序问题

    • 在函数定义中,*args必须放在位置参数之后,**kwargs必须放在*args之后。
  • 灵活性与可读性

    • 虽然*args**kwargs非常灵活,但过度使用可能会降低代码的可读性。建议在明确需要处理可变数量参数时使用。

7. 总结

  • *args用于处理可变数量的非关键字参数,打包成元组。
  • **kwargs用于处理可变数量的关键字参数,打包成字典。
  • 两者可以结合使用,但必须遵循顺序:位置参数 -> *args -> **kwargs

掌握*args**kwargs的使用方法,可以让你写出更加灵活和强大的Python代码。

到此这篇关于Python中args和kwargs用法与区别举例详解的文章就介绍到这了,更多相关python中args和kwargs用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于python3实现socket文件传输和校验

    基于python3实现socket文件传输和校验

    这篇文章主要为大家详细介绍了基于python3实现socket文件传输和校验,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python批量添加图片水印的实现

    Python批量添加图片水印的实现

    水印在很多时候都会使用的到,本文主要介绍了Python批量添加图片水印的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • python:print格式化输出到文件的实例

    python:print格式化输出到文件的实例

    今天小编就为大家分享一篇python:print格式化输出到文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python Selenium中等待设置的实现

    Python Selenium中等待设置的实现

    本文主要介绍了Python Selenium中等待设置的实现,过详实的示例代码,深入介绍了显式等待、隐式等待、自定义等待条件、多重等待条件、页面加载状态的等待、元素存在与可见性等待、Fluent等待以及异步JavaScript加载的等待,感兴趣的可以了解一下
    2023-12-12
  • 使用Python脚本提取基因组指定位置序列

    使用Python脚本提取基因组指定位置序列

    这篇文章主要为大家介绍了使用Python脚本提取基因组指定位置序列的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 一文搞懂Python中subprocess模块的使用

    一文搞懂Python中subprocess模块的使用

    subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。本文将和大家聊聊subprocess模块的使用,需要的可以参考一下
    2022-11-11
  • Flask解决指定端口无法生效问题

    Flask解决指定端口无法生效问题

    文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Flask模式改为Python模式来解决此问题,需要的朋友可以参考下
    2025-03-03
  • 使用Python中的PIL库给图片添加马赛克

    使用Python中的PIL库给图片添加马赛克

    Pillow是一个Python图像处理库,提供了广泛的图像处理功能包括图像格式转换、图像增强等,本文就来用PIL库实现给图片添加马赛克效果,感兴趣的可以了解一下
    2023-05-05
  • Python结合PyWebView库打造跨平台桌面应用

    Python结合PyWebView库打造跨平台桌面应用

    随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView库实现这一创新方案,希望对大家有一定的帮助
    2025-04-04
  • python3中_from...import...与import ...之间的区别详解(包/模块)

    python3中_from...import...与import ...之间的区别详解(包/模块)

    Python编码第一步是导入模块,有时候用import ***有时候用from...import,下面这篇文章主要给大家介绍了关于python3中_from...import...与import ...之间区别的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论