django学习-18.*args和**kwargs的用法和使用场景
目录结构
1.前言
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的用法和使用场景的更多相关文章
- django 学习-18 用户管理Auth系统使用
1.首先跟之前说的admin的要求有点像, vim urls.py from django.contrib import adminadmin.autodiscover() ...
- Python中的args和kwargs
有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...
- Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程
这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...
- python学习-- 理解'*','*args','**','**kwargs'
刚开始学习Python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. ...
- 学习python的*args和 **kwargs
*args表示任何多个无名参数,它是一个tuple(元组):**kwargs表示关键字参数,它是一个dict(字典) def foo(*args, **kwargs): print 'args = ' ...
- python学习笔记:*args和**kwargs使用原理?
一.*args和**kwargs原理 先看个例子: def test(*args,**kwargs): print("args =",args) print("kwarg ...
- [Python学习笔记-004] 可变参数*args和**kwargs
在Python中,可变参数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...
- python中*args和**kwargs学习
*args 和 **kwargs 经常看到,但是一脸懵逼 ,今天终于有收获了 """ python 函数的入参经常能看到这样一种情况 *args 或者是 **kwargs ...
- Django 学习笔记(七)数据库基本操作(增查改删)
一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...
随机推荐
- python atexit模块学习
python atexit模块 只定义了一个register模块用于注册程序退出时的回调函数,我们可以在这个函数中做一下资源清理的操作 注:如果程序是非正常crash,或者通过os._exit()退出 ...
- MTO1804无刷电机引发的悲惨经历之二:电调固件刷新与优化
前言 原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正. 书接上回,我们总算是基本确认了黑衣神秘电调的身份,本文就尝试对电调固件进行一番设置,来个免费优化. 1.刷新固件 关于电调的固件 ...
- Java关键字及作用解释
访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类.方法或字段(在类中声明的变量). 只能在声明 private(内部)类.方法或字段的类中引用这些类.方法或 ...
- Quartz:定时任务工具类
Quartz:定时任务工具类 Quartz工具类 Quartz工具类 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; ...
- Spring框架——IOC&DI
Spring Spring 目标 内容 Spring与web整合的原理 Spring 中包含的关键特性 Spring架构图 企业级框架 企业级系统 IOCDI IOC DI IOC和DI 为什么使用依 ...
- Spark调优,性能优化
Spark调优,性能优化 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitio ...
- idea中将普通工程设置为maven项目
只需要在工程上右键,"Add Frameworks support...",然后选择Maven即可
- Codeforces Round #656 (Div. 3) B. Restore the Permutation by Merger
题目链接:https://codeforces.com/contest/1385/problem/B 题意 有两个大小为 $n$ 的相同的排列,每次从二者或二者之一的首部取元素排入新的数组,给出这个大 ...
- AcWing 239.奇偶游戏 (带权并查集/种类并查集)
题意:你和朋友玩游戏,有个一\(01\)序列,你每次给出一个区间,朋友会回答这个区间中的\(1\)的个数是奇数还是偶数,但是你亲爱的朋友可能在撒谎,问在哪个询问你能确定你的朋友在撒谎,输出回合数. 题 ...
- CF1474-C. Array Destruction
CF1474-C. Array Destruction 题意: 题目给出一个长度为\(2n\)的正整数序列,现在问你是否存在一个\(x\)使得可以不断的进行如下操作,直到这个序列变为空: 从序列中找到 ...