• 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】组合起来可以传入任意的参数,这在函数参数个数未知的情况下是很有效的一种做法,同时大大加强了函数的可拓展性。

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

  • 相关阅读:
    体验最火的敏捷——SCRUM(厦门,2014.1.4)
    再谈僵尸大会(每日会议)
    神马是敏捷?(4)——敏捷不能当饭吃
    XMLHttpRequest
    xml基础
    element 更换主题
    css3中新增的背景属性和文本效果
    transform rotate旋转 锯齿的解决办法
    优化实现Mobile/Bumped Diffuse
    优化实现Mobile Diffuse动态直接光照shader
  • 原文地址:https://www.cnblogs.com/xiamen-momo/p/14362319.html
Copyright © 2020-2023  润新知