python中的装包与拆包
来源:互联网 发布:嵌入式 linux 忘记密码 编辑:程序博客网 时间:2024/04/30 10:35
*args和 **kwargs是在python的代码中经常用到的两个参数,初学者对这两个参数的理解可能仅仅限于*args是用于接收多余的未命名参数,**kwargs用于接收形参中的命名参数,其中args是一个元组类型,而kwargs是一个字典类型的数据。
其实这两个参数还涉及到了python中的一个重要的知识点,拆包与解包。这篇文章将会通过对这两个参数的拆开揉碎讲解,让小伙伴能对拆包解包有一些更深刻的认识。(我一直认为这个世界上只存在懂与不懂两种状态,从来没有什么似懂非懂)。
1.*args
先看下面这段代码,挺住别晕,哈哈。
def run(a,*args): #第一个参数传给了a print(a) # args是一个元组,里面是2和3两个参数 print(args) # *args是将这个元组中的元素依次取出来 print("对args拆包") print(*args) # *args 相当于 a,b = args print("将未拆包的数据传给run1") run1(args) print("将拆包后的数据传给run1") run1(*args)def run1(*args): print("输出元组") print(args) print("对元组进行拆包") print(*args)run(1,2,3) #后面的2和3
下面是上面程序的输出结果:
理解这段代码需要把握住下面几点:
1.形参中的*args其实真正接收数据的args,它是一个元组,把传进来的数据放在了args这个元组中。
2. 函数体里的args依然是那个元组,但是*args的含义就是把元组中的数据进行拆包,也就是把元组中的数据拆成单个数据。
3. 对于args这个元组,如果不对其进行解包,就将其作为实参传给其它以*args作为形参的函数时,args这个元组会看看作一个整体,作为一个类型为元组的数据传入。
把握上面的这三点,就不会被刚才的程序绕晕了。
2. **kwargs
如果对上面的*args理解了,那么这个**kwargs也就不难理解了,把这两个**类比成之前的一个*,接下来程序的所有执行结果都可以得到合理的解释。
def run(**kwargs):#传来的 key = value 类型的实参会映射成kwargs里面的键和值 # kwargs是一个字典,将未命名参数以键值对的形式 print(kwargs) print("对kwargs拆包") # 此处可以把**kwargs理解成对字典进行了拆包,{"a":1,"b":2}的kwargs字典又 # 被拆成了a=1,b=2传递给run1,但是**kwargs是不能像之前*args那样被打印出来看的 run1(**kwargs) #print(**kwargs) def run1(a,b): #此处的参数名一定要和字典的键的名称一致 print(a,b)run(a=1,b=2)
执行结果如下图:
总结:
1. *args作为形参时是用来接收多余的未命名参数,而**kwargs是用来接收key=value这种类型的命名参数,args是元组,kwargs是字典。
2. *和**在函数体中除了拆包之外,并没有什么卵用。
3. 装包的含义就是把未命名参数和命名参数分别放在元组或者字典中。
阅读全文
0 0
- python中的装包与拆包
- Python中的模块与包
- Python中的模块与包
- Python中的模块与包
- python中的闭包与装饰器
- Python中的闭包
- python中的闭包
- python中的闭包
- Python中的闭包
- Python中的闭包
- python中的json包
- Python中的闭包
- Python中的numpy包
- python中的pandas包
- python中的闭包
- python中的闭包
- python中的闭包
- python中的闭包
- HttpHuiApplication--下载图片url,HttpURLConnection,简单版
- 我的学习之路_第二十一章_JDBC连接池
- LED PWM控制芯片PCA9685的Linux 驱动
- set in Python
- mysql动态扩容调研
- python中的装包与拆包
- 自己定义CNN网络模型并使用caffe训练
- 设计模式之pimpl惯用法C语言版(城门失火 殃及池鱼)
- C++&系统 异常
- c++ 宏
- Cpp.Study.Note.初识 Cpp中的类
- MyEclipse导入 Java Web工程
- 基于JQ 根据输入内容自适应输入框高度 支持输入增高 渲染时设置高度和内容一致
- 网络安全知识之对称加密与base64