django中的*args 与 **kwargs使用介绍

 更新时间:2021年3月13日 15:00  点击:1588

这是Python函数可变参数 args及kwargs

*args表示任何多个无名参数,它是一个tuple

**kwargs表示关键字参数,它是一个dict

测试代码如下:

def foo(*args,**kwargs): print 'args=',args print 'kwargs=',kwargs print '**********************' if __name__=='__main__': foo(1,2,3) foo(a=1,b=2,c=3) foo(1,2,3,a=1,b=2,c=3) foo(1,'b','c',a=1,b='b',c='c')

执行结果如下:

args= (1, 2, 3) kwargs= {} **********************
args= () kwargs= {'a': 1, 'c': 3, 'b': 2} **********************
args= (1, 2, 3) kwargs= {'a': 1, 'c': 3, 'b': 2} **********************
args= (1, 'b', 'c') kwargs= {'a': 1, 'c': 'c', 'b': 'b'} **********************

补充:Python中的**kwargs和*args这么理解

Python中经常看到**kwargs和*args这么两个参数,例如下面groupby的参数。

到底是什么意思呢?

怎么使用?

DataFrame.groupby(by=None, axis=0, level=None, as_index= True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

**kwargs和*args意思

*args和**kwargs一般是用在函数定义的时候。二者的意义是允许定义的函数接受任意数目的参数。也就是说我们在函数被调用前并不知道也不限制将来函数可以接收的参数数量。在这种情况下我们可以使用*args和**kwargs。

*args的使用

*args用来表示函数接收可变长度的非关键字参数列表作为函数的输入。我们可以通过以下这个例子来进一步理解*args。

def test_args(normal_arg, *args):
 print("first normal arg:" + normal_arg)
 for arg in args:
  print("another arg through *args :" + arg)
test_args("normal", "python", "java", "C#")

上面代码的执行结果如下:

first normal arg: normal
another arg through *args : python
another arg through *args : java
another arg through *args :C#

**kwargs的使用

**kwargs表示函数接收可变长度的关键字参数字典作为函数的输入。当我们需要函数接收带关键字的参数作为输入的时候,应当使用**kwargs。我们可以通过以下这个例子来进一步理解**kwargs。

def test_kwargs(**kwargs):
 if kwargs is not None:
  for key, value in kwargs.iteritems():
   print("{} = {}".format(key,value))
  # Or you can visit kwargs like a dict() object
  # for key in kwargs:
  # print("{} = {}".format(key, kwargs[key]))
test_kwargs(name="python", value="5")

以上代码的执行结果如下:

name = python
value = 5

以上例子只是*args和**kwargs的基本的使用例子。下面再给出一个用*args和**kwargs来定义能够接收列表输入和字典输入的函数的例子。

使用*args和**kwargs来调用函数

比如我们有如下接收普通输入参数的函数:

def normal_func(arg1, arg2, arg3):
 print("arg1: " + arg1)
 print("arg2: " + arg2)
 print("arg3: " + arg3)
normal_func("python", 1, 3)

使用*args和**kwargs来调用这个函数的代码如下:

# 使用*args
args_list = ("python", 1, 3)
normal_func(*args_list)
# 使用**kwargs
kwargs_dict = {"arg3": 3, "arg1": "python", "arg2": 1}
normal_func(**kwargs_dict)

以上三段代码的输出均为:

arg1: python
arg2: 1
arg3: 3

汇总

*args和**kwargs都指定义函数时其内部参数数量问题,不指定具体数量,依据使用时具体情况而临场确定数量。

*args针对非关键字参数,**kwargs针对关键字参数。

不仅在定义函数时有空,并且可以作为函数实际调用时作为参数使用。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。

[!--infotagslink--]

相关文章

  • Django def clean()函数对表单中的数据进行验证操作

    这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09
  • 在Django中使用MQTT的方法

    这篇文章主要介绍了在Django中使用MQTT的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
  • 解决导入django_filters不成功问题No module named 'django_filter'

    这篇文章主要介绍了解决导入django_filters不成功问题No module named 'django_filter',具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-15
  • Django项目连接MongoDB的三种方法

    本文主要介绍了Django项目连接MongoDB的三种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-27
  • 详解如何使用Docker部署Django+MySQL8开发环境

    这篇文章主要介绍了详解如何使用Docker部署Django+MySQL8开发环境,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-19
  • Django 解决由save方法引发的错误

    这篇文章主要介绍了Django 解决由save方法引发的错误,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-21
  • django前端页面下拉选择框默认值设置方式

    这篇文章主要介绍了django前端页面下拉选择框默认值设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-10
  • django数据模型中null和blank的区别说明

    这篇文章主要介绍了django数据模型中null和blank的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-03
  • Django表单外键选项初始化的问题及解决方法

    这篇文章主要介绍了Django表单外键选项初始化的问题及解决方法,需本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,要的朋友可以参考下...2021-04-29
  • 使用AJAX和Django获取数据的方法实例

    这篇文章主要给大家介绍了关于使用AJAX和Django获取数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-25
  • django ajax发送post请求的两种方法

    这篇文章主要介绍了django ajax发送post请求的两种方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-04-30
  • Django开发RESTful API实现增删改查(入门级)

    这篇文章主要介绍了Django开发RESTful API实现增删改查(入门级),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
  • Django获取model中的字段名和字段的verbose_name方式

    这篇文章主要介绍了Django获取model中的字段名和字段的verbose_name方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-20
  • django中url映射规则和服务端响应顺序的实现

    这篇文章主要介绍了django中url映射规则和服务端响应顺序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-10
  • Django项目如何获得SSL证书与配置HTTPS

    本文总结了如何获得SSL证书并给Django项目配置HTTPS,建议先收藏再阅读,将来有一天你很可能会用到它。...2021-05-01
  • Django后台管理系统的图文使用教学

    在本篇文章里小编给大家整理的是一篇关于Django后台管理系统的图文使用教学内容,需要的朋友们参考下。...2020-04-22
  • django 连接数据库出现1045错误的解决方式

    这篇文章主要介绍了django 连接数据库出现1045错误的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-15
  • Python Django ORM连表正反操作技巧

    这篇文章主要介绍了Django-ORM-连表正反操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-06-13
  • Python Django搭建文件下载服务器的实现

    这篇文章主要介绍了Python Django搭建文件下载服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
  • Django数据库迁移报错InconsistentMigrationHistory

    最近在使用Django,学习了一下Django数据库迁移,在执行迁移命令时,突然报错,本文就总结了一下原因,感兴趣的小伙伴们可以参考一下...2021-05-31