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 ...
随机推荐
- (G)I-DLE—화(火花) (HWAA)
闲来无事又来推歌了/cy 我这博客好像只能用来更日记+推歌了/kk 到今天(G)I-DLE已经获得九个一位啦~ 歌真的挺不错的 特别是,一个韩国女团出了这首歌的中文版 就觉得很有好感 music 韩文 ...
- wmi_exporter+Prometheus+Grafana
wmi_exporter+Prometheus+Grafana 原文地址: CSDN:NRlovestudy:Windows 下搭建 wmi_exporter+Prometheus+Grafana 服 ...
- docker --- (入门必读)
容器 容器就是一个视图隔离.资源可限制.独立文件系统的进程集合.所谓"视图隔离"就是能够看到部分进程以及具有独立的主机名等:控制资源使用率则是可以对于内存大小以及 CPU 使用个数 ...
- 远程url文件地址转成byte
public static byte[] urlTobyte(String url) throws MalformedURLException { URL ur = new URL(url); Buf ...
- 删除无用docker镜像
docker images | grep none | grep -v grep | awk '{print $3}' | xargs docker rmi -f
- WPF 之 依赖属性与附加属性(五)
一.CLR 属性 程序的本质是"数据+算法",或者说用算法来处理数据以期得到输出结果.在程序中,数据表现为各种各样的变量,算法则表现为各种各样的函数(操作符是函数的简记法). ...
- Atcoder ABC161 A~E
传送门 A - ABC Swap 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 ...
- 2019 ICPC Asia Taipei-Hsinchu Regional Problem J Automatic Control Machine (DFS,bitset)
题意:给你\(m\)个长度为\(n\)的二进制数,求最少选多少个使它们\(|\)运算后所有位置均为\(1\),如果不满足条件,则输出\(-1\). 题解:这题\(n\)的范围很大,所以我们先用\(st ...
- CF1462-E2. Close Tuples (hard version)
本题为hard版,还有一个easy版,区别在于k和m的取值不同. 题意: 给出一个由n个数字组成的数组 \(a\).现在定义一种子集为\(\{A_1, A_2, A_3, ..., A_m\}\),使 ...
- Docker配置文件deamon.json详解
vim /etc/docker/daemon.json { "authorization-plugins": [], "data-root": "&q ...