目录结构

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

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

django学习-18.*args和**kwargs的用法和使用场景的更多相关文章

  1. django 学习-18 用户管理Auth系统使用

    1.首先跟之前说的admin的要求有点像, vim urls.py from django.contrib import adminadmin.autodiscover()               ...

  2. Python中的args和kwargs

    有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...

  3. Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程

    这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...

  4. python学习-- 理解'*','*args','**','**kwargs'

    刚开始学习Python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1.  ...

  5. 学习python的*args和 **kwargs

    *args表示任何多个无名参数,它是一个tuple(元组):**kwargs表示关键字参数,它是一个dict(字典) def foo(*args, **kwargs): print 'args = ' ...

  6. python学习笔记:*args和**kwargs使用原理?

    一.*args和**kwargs原理 先看个例子: def test(*args,**kwargs): print("args =",args) print("kwarg ...

  7. [Python学习笔记-004] 可变参数*args和**kwargs

    在Python中,可变参数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...

  8. python中*args和**kwargs学习

    *args 和 **kwargs 经常看到,但是一脸懵逼 ,今天终于有收获了 """ python 函数的入参经常能看到这样一种情况 *args 或者是 **kwargs ...

  9. Django 学习笔记(七)数据库基本操作(增查改删)

    一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...

随机推荐

  1. python实现文件查找功能,excel写入功能

    因为要丛UE文档中过滤关键字来统计解码时间,第一次自己完成了一个自动化统计的小工具,用起来颇有成就感. UE文件的内如如下: 需要丛这份关键字中过滤红色标记的两个关键字,取 一个关键字的最后一位,和取 ...

  2. (G)I-DLE—화(火花) (HWAA)

    闲来无事又来推歌了/cy 我这博客好像只能用来更日记+推歌了/kk 到今天(G)I-DLE已经获得九个一位啦~ 歌真的挺不错的 特别是,一个韩国女团出了这首歌的中文版 就觉得很有好感 music 韩文 ...

  3. Phoenix的shell操作

    Phoenix的shell操作 一.Phoenix的Shell操作 1.进入(hbase01是主机名,2181是zookeeper的端口) 2.退出(注意结尾不加分号) 3.查询所有表(注意结尾不加分 ...

  4. java架构《并发线程高级篇一》

    本章主要记录讲解并发线程的线程池.java.util.concurrent工具包里面的工具类. 一:Executor框架: Executors创建线程池的方法: newFixedThreadPool( ...

  5. TCP/IP__TCP/IP协议

    1.定位:指因特网整个TCP/IP协议族,由四个层次组成:网络接入层.网络层.主机到主机层.应用层.也叫DoD模型.每一层都呼叫它的下一层所提供的网络来完成自己的需求. 2.与OSI模型的对应: 3. ...

  6. Pytest(1)安装与入门

    pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍,它 ...

  7. hdu 6268 Master of Subgraph(点分治+bitset)

    You are given a tree with n nodes. The weight of the i-th node is wi. Given a positive integer m, no ...

  8. 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(DFS计算图中所有环的长度)

    题目链接:https://codeforces.com/gym/102361/problem/F 题意 有 \(n\) 个点和 \(m\) 条边,每条边属于 \(0\) 或 \(1\) 个环,问去掉一 ...

  9. Dire Wolf——HDU5115

    Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not ...

  10. hdu517 Triple

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submissio ...