python中的关键字参数*args和**kwargs详解

 更新时间:2023年11月03日 10:08:36   作者:惊瑟  
这篇文章主要介绍了python中的关键字参数*args和**kwargs详解,在定义类或函数时,有时候会用到*args和**kwargs,前者叫位置参数,后者叫关键字参数,需要的朋友可以参考下

一、使用场景

在定义类或函数时,以下场景会用到*args和**kwargs,前者叫位置参数,后者叫关键字参数

  1. 不确定传入参数的数量或形式
  2. 不关心传入参数的数量或形式(此时该类或函数多作为一个中间件的角色,接收参数后只是做了一些预处理,最后将这些参数传递给其他类或函数做进一步处理,如装饰器)

二、使用方法

基本使用:

def receive_args(*args, **kwargs):
    print(f'args type is: {type(args)}, value is: {args}')
    print(f'kargs type is: {type(kwargs)}, value is: {kwargs}')

if __name__ == '__main__':
    receive_args(0,name='jyz')

输出:

args type is: <class 'tuple'>, value is: (0,)
kargs type is: <class 'dict'>, value is: {'name': 'jyz'}

由此我们得出:args本质是一个tuple,kwargs本质是dict,值得注意的是,*是在定义函数的形式参数时用来标志参数的类型(位置参数还是关键字参数),在函数体内要拿到真正的参数需要将*去掉。

传入多个参数

def receive_args(*args, **kwargs):
    print(f'args type is: {type(args)}, args[0] is: {args[0]}, args[1 ] is: {args[1]},args[2] is: {args[2]}')
    print(f"kwargs type is: {type(kwargs)}, name is: {kwargs['name']}, gender is: {kwargs['gender']}")

if __name__ == '__main__':
    receive_args(0,1,2,name='jyz',gender='male')

输出:

args type is: <class 'tuple'>, args[0] is: 0, args[1 ] is: 1,args[2] is: 2
kwargs type is: <class 'dict'>, name is: jyz, gender is: male

由于args本质是一个tuple,kwargs本质是dict,因此可以在函数中对它们直接进行操作。

容易出错的地方

def receive_args(*args, **kwargs):
    print('args is: ',args)
    print('kwargs is: ',kwargs)
    
if __name__ == '__main__':
    a = 0
    b = 1
    d = {'name':'jyz','gender':'male'}
    receive_args(a,b,d)

输出:

args is:  (0, 1, {'name': 'jyz', 'gender': 'male'})
kwargs is:  {}

出乎意料的是,receive_args并未将d当做kwargs,而是作为args。而如果想要将字典类型作为关键字变量传到函数中去,需要在变量前使用**做额外的标志:

def receive_args(*args, **kwargs):
    print('args is: ',args)
    print('kwargs is: ',kwargs)

if __name__ == '__main__':
    a = 0
    b = 1
    d = {'name':'jyz','gender':'male'}
    receive_args(a,b,**d) # d前用**做标志

输出:

args is:  (0, 1)
kwargs is:  {'name': 'jyz', 'gender': 'male'}

三、结论

  1. args本质是一个tuple,kwargs本质是dict;
  2. 传入关键字参数时,要么使用key=value形式传递;要么先定义dict再使用**dict传递。

到此这篇关于python中的关键字参数*args和**kwargs详解的文章就介绍到这了,更多相关python中的*args和**kwargs内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 元组列表字典(莫烦python基础)

    元组列表字典(莫烦python基础)

    这篇文章主要介绍了python元组列表字典,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python3.6简单操作Mysql数据库

    Python3.6简单操作Mysql数据库

    这篇文章主要为大家详细介绍了Python3.6简单操作Mysql数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Python中的jquery PyQuery库使用小结

    Python中的jquery PyQuery库使用小结

    这篇文章主要介绍了Python中的jquery PyQuery库使用小结,需要的朋友可以参考下
    2014-05-05
  • pytho传参kwargs及用法详解

    pytho传参kwargs及用法详解

    这篇文章主要介绍了pytho传参kwargs及用法,函数传参的时候简化传参形式,无需指定参数名,本文结合实例代码讲解的非常详细,需要的朋友参考下吧
    2024-05-05
  • Python连接es之查询方式示例汇总

    Python连接es之查询方式示例汇总

    这篇文章主要为大家介绍了Python连接es之查询方式示例汇总详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 使用python绘制爱心效果代码实例

    使用python绘制爱心效果代码实例

    本文介绍了如何使用Python的Turtle模块绘制一个红色的爱心图形,示例代码通过定义draw_love函数,利用Turtle的移动和转向功能,实现了爱心轮廓的绘制,并填充红色,这种方法适用于简单的图形绘制,并可视化展示结果,需要的朋友可以参考下
    2024-09-09
  • Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)

    Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)

    这篇文章主要介绍了Pycharm2020.1安装中文语言插件的详细教程,不需要汉化,本文给大家分享三种方法,在这小编推荐使用方法二,具体内容详情大家跟随小编一起看看吧
    2020-08-08
  • Python 在局部变量域中执行代码

    Python 在局部变量域中执行代码

    这篇文章主要介绍了Python 如何在局部变量域中执行代码,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下
    2020-08-08
  • python起点网月票榜字体反爬案例

    python起点网月票榜字体反爬案例

    大家好,本篇文章主要讲的是python起点网月票榜字体反爬案例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Python-嵌套列表list的全面解析

    Python-嵌套列表list的全面解析

    下面小编就为大家带来一篇Python-嵌套列表list的全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论