django学习-18.*args和**kwargs的用法和使用场景

目录结构

1.前言

2.【*args】的用法

2.1.第一步:首先编写这样的函数【test1】。

2.2.第二步:给函数【test1】赋值相关入参值。

2.3.第三步:调用函数【test1】,得到以下结果。

3.【**kwargs】的用法

3.1.第一步:首先编写这样的函数【test2】。

3.2.第二步:给函数【test2】赋值相关入参值。

3.3.第三步:调用函数【test2】,得到以下结果。

4.相关学习资料

1.前言

通过python编写的代码中,我们经常会见到这两个词【*args】和【**kwargs】,但是之前没深入学习导致只懂一点概念,所以趁这次空闲时间进行深入学习。
其实args和kwargs这只是编程人员约定俗成的变量名字,说直白一点就是习惯写成这样的变量名字了,我们也可以写成【*aaa】和【**bbb】。
为了搞清楚【*args】和【**kwargs】的基本用法,并且为了搞清楚后能更加熟练地运用于实际的项目开发,我们是有必要去做相关笔记,因为以后我们即使忘了也能通过笔记去进行快速复习。
相关细节:
①.【args】是单词【arguments】的缩写,表示可变参数;
②.【kwargs】是单词【keyword arguments】的缩写,表示关键字参数。
③.【*args】和【**kwargs】这其实就是 python语言中入参形式里的两种形式。
④. python入参形式只有这四种:位置参数、默认参数、可变参数、关键字参数。
⑤. 四种入参形式在一个函数的入参填写位置必须遵守这个基本原则:先是位置参数,再是默认参数,再接着是可变参数,最后是关键字参数。
⑥.  在任一个函数/方法的入参形式组合里, 入参【*args】必须只能放在入参【**kwargs】的前面,因为可变参数只能在关键字参数的前面。
 
 

2.【*args】的用法

【*args】就是就是传递一个可变参数列表给函数实参args,这个参数列表的数目未知,甚至长度可以为0。下面这段代码演示了如何使用【*args】。

2.1.第一步:首先编写这样的函数【test1】。

def test1(name,age=10,*args):
    print("第一个入参为位置参数name,且位置参数name的值为:%s"%name)
    print("第二个入参为默认参数age,且默认参数age的值为:%s"%age)
    print("第三个入参是可变参数args,数据类型为元祖")
    print(type(args))
    for i in args:
        print("可变参数args里的每个值为:%s"%i)

2.2.第二步:给函数【test1】赋值相关入参值。

test1("洪景盛",20,"a1","a2","a3","a3")

2.3.第三步:调用函数【test1】,得到以下结果。

第一个入参为位置参数name,且位置参数name的值为:洪景盛
第二个入参为默认参数age,且默认参数age的值为:20
第三个入参是可变参数args,数据类型为元祖
<class 'tuple'>
可变参数args里的每个值为:a1
可变参数args里的每个值为:a2
可变参数args里的每个值为:a3
可变参数args里的每个值为:a3

通过结果,我们可以得到这些结论:

①.第一个参数【name】是必须要传入的参数,参数name是位置参数。

②.第二个参数【age】是非必须要传入的参数,参数age是默认参数。

③.第三个参数【*args】是非必须要传入的参数,参数args是可变参数(可变参数的数据类型为元祖)。这四个入参值【"a1","a2","a3","a3"】则作为可变参数列表传给了参数args,并且是作为元组tuple来使用的。

3.【**kwargs】的用法

【**kwargs】就是将一个可变的关键字参数的字典传给函数实参kwargs,同样参数列表长度可以为0或为其他值。下面这段代码演示了如何使用【**kwargs】。

3.1.第一步:首先编写这样的函数【test2】。

def test2(name, sex="",*args, **kwargs):
   print('必填参数name的值:%s'%name)
   print('默认参数sex的值:%s'%sex)
   print(type(kwargs))
   for i in args:
      print ('可变参数args里的每个值为', i)
   for k, v in kwargs.items():
      print ('关键字参数kwargs的,每个key为: %s, 每个value为:%s;' % (k, v))

3.2.第二步:给函数【test2】赋值相关入参值。

test2(1,"女","A",False,{"a1":1},3,[2,"a2",{"c1":7}],k1=1,k2=2,k3=[11,22,"33",{"b1":11}],k4={"r1":1})

3.3.第三步:调用函数【test2】,得到以下结果。

必填参数name的值:1
默认参数sex的值:女
<class 'dict'>
可变参数args里的每个值为 A
可变参数args里的每个值为 False
可变参数args里的每个值为 {'a1': 1}
可变参数args里的每个值为 3
可变参数args里的每个值为 [2, 'a2', {'c1': 7}]
关键字参数kwargs的,每个key为: k1, 每个value为:1;
关键字参数kwargs的,每个key为: k2, 每个value为:2;
关键字参数kwargs的,每个key为: k3, 每个value为:[11, 22, '33', {'b1': 11}];
关键字参数kwargs的,每个key为: k4, 每个value为:{'r1': 1};

通过结果,我们可以得到这些结论:

①.args数据类型是一个元祖tuple,而kwargs数据类型则是一个字典dict,并且【*args】只能位于【**kwargs】的前面。

4.相关学习资料

①.关于【*args】和【**kwargs】的深入学习,可以参考这篇博客:https://www.cnblogs.com/yangzilaing/p/13470775.html

②.关于【位置参数、默认参数、可变参数、关键字参数】的深入学习,可以参考这篇博客:https://www.cnblogs.com/bingabcd/p/6671368.html

学习建议:

①.务必要搞懂【*args】和【**kwargs】的基本原理和知道大概怎么用。

②.在一个函数里把【*args】和【**kwargs】组合起来可以传入任意的参数,这在函数参数个数未知的情况下是很有效的一种做法,同时大大加强了函数的可拓展性。

③.【位置参数、默认参数、可变参数、关键字参数】的相关知识点,是学习如何写好一个规范的函数的最重要的基础知识点,也要知道大概怎么用。

原文地址:https://www.cnblogs.com/xiamen-momo/p/14362319.html