python中的装包与解包*,**
学习过程中遇到了*解包的过程,很感兴趣,于是实验一番,
a = (1, 2, 3, 4, 5, 6) b = [2, 3, 4, 5, 5, 6] c = {"name": 'zhang', "age": 2}print(*a) print(*b) print(*c)
结果 :
1 2 3 4 5 6
2 3 4 5 5 6
name age
结果和想象中差不多,只有字典的结果,不太满意,所以我又尝试**
print(**c)
结果:
print(**c)
TypeError: 'name' is an invalid keyword argument for this function
为什么打印不出来呢,我在学习过程中看到的代码是可以用**来解字典的,后来又看到了下面这个
print("Name:{name}, Age:{age}".format(**c))
结果:
Name:zhang, Age:2
那么,为什么放在format里面就行,而print不行呢
经过多次验证,原来**解出来的数据是这样的
**c = name='zhang',age=2
而print只支持*args,不支持**kwargs,如下源码:
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
注意点:
**只能解mapping,也就是映射型的数据,python中暂时好像我就知道字典是,如果解列表或者元祖,则如下:
print(**b)
TypeError: print() argument after ** must be a mapping, not list
以上是自己尝试的过程,
以下是原作者的文章:
https://blog.csdn.net/qq_1290259791/article/details/80964432
*args和 **kwargs是常用的两个参数
- *args:用于接受多余的未命名的参数,元组类型。
- **kwargs:用于接受形参的命名参数,字典类型的数据。
可变参数args:
def fun(n, *args):print(n)print(args) # 未拆包print(*args) # 进行拆包
fun(1,2,3,4)
结果:
1
(2, 3, 4)
2 3 4
- 形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。
- 函数中的args仍然是元组, *args就是将元组的数据进行拆包,一开始输入的形式。
关键字参数**kwargs
def fun(**kwargs):print(kwargs) # 未拆包print(*kwargs) # 进行拆包
fun(a=1, b=2)
结果:
{'a': 1, 'b': 2}
a b
- *args用来接受多余的未命名参数, **kwargs是用来接受命名参数。
- 装包的意义就是把未命名的参数和命名的参数放在元组或字典中。
解包
上面介绍了args, kwargs的装包作用,起到作用的是、 这两个参数。
1. 解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。
2. 解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。
def fun(*args, **kwargs):for arg in args:print(arg)for k, v in kwargs.items():print(k, v)print('-'*50)
fun(a, c) # 参数都赋值给args,并没有kwargs的参数
fun(*a, *c) # 解压的参数都赋值给args 等价为 1, 2, 3, 'a', 'b', 'c'
fun(*a, **c) # a解压给args,c解压给kwargs 等价为 1, 2, 3, 'a'=1, 'b'=2, 'c'=3
结果:
[1, 2, 3]
{'a': 1, 'b': 2, 'c': 3}
--------------------------------------------------
1
2
3
a
b
c
--------------------------------------------------
1
2
3
a 1
b 2
c 3
问题:
- 在传入参数时,可变参数(*)之前不能指定参数名
def myfun(a, *b):print(a)print(b)
myfun(a=1,2,3,4)myfun(a=1,2,3,4)^
SyntaxError: positional argument follows keyword argument
2.函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中
def myfun(a, *b, c=None):print(a)print(b)print(c)
myfun(1,2,3,c=4)1
(2, 3)
4
3.一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后
def myfun(*, a, b):print(a)print(b)
myfun(a=1, b=2)1
2
4.关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以
def myfun(a, *b, c, **d):print(a)print(b)print(c)print(d)
myfun(1, 2, w=6, c=3, d=4, e=5) # 记住可变参数(*)之前不能指定参数名1
(2,)
3
{'w': 6, 'd': 4, 'e': 5}
python中的装包与解包*,**相关推荐
- Python中的打包与解包
解包:Unpacking,比如你儿子去买包子回来分给你的家人. a, *b, c = [1, 2, 3, 4, 5] print(a) # 1 print(b) # [2, 3, 4] print( ...
- Python中self用法详解
Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...
- python中的字符串详解(附实现文字跑马灯效果)
python中的字符串详解 1.什么是字符串 相信大家对字符串应该是再熟悉不过了吧,因为日常生活中的一句话,或是路边的一则广告,其实它都相当于一个字符串,而顾名思义,字符串也就是一串串的由零个或多 ...
- python中的GIL详解
python中的GIL详解 参考Python-- GIL 锁简述 GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就 ...
- python正确的赋值语句-Python 赋值语句技巧之序列解包
python赋值语句技巧之序列解包sequence unpacking,是python语言赋值语句的一种技巧方法,在给多个python 变量命名同时赋值时是很有效率的一种方法. 赋值语句序列解包概念 ...
- python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继 ...
- 【 Python 中 int 用法详解】(转载)
Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...
- Python 中 int 用法详解
Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...
- matlab求最小范数解,python中计算最小范数解或伪逆解最精确的方法是什么?
我的目标是解决:Kc=y 对于伪逆(即最小范数解): ^{pr2}$ 这样模型(希望)是高次多项式模型f(x) = sum_i c_i x^i.我特别感兴趣的是我们有更多的多项式特征比数据(少方程太多 ...
最新文章
- 用 Python 实现一个大数据搜索引擎
- vim命令杂烩(复制粘贴、建文件、撤销等)
- 《深入体验 飞鸽传书 开发内幕 核心基础》
- GCC同时使用静态库和动态库链接
- docker必须要sudo,但是sudo的话,又获得不了环境变量怎么办?
- 85、android handler的警告Handler Class Should be Static or Leaks Occur
- 查找 -- 7.1 Sear for a Range -- 图解
- pycharm 变量批量重命名
- IM消息重试机制Java实现_消息的重试机制的设计思路
- 学弟学妹看我文章顺利毕业,基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》
- 微波雷达感应模块技术应用,多普勒雷达,人体存在感应模组
- Xenu工具的简单使用
- CSS动画:梦幻西游
- python换发型_初学Python的一些细节
- HIVE获取时间函数, regexp_extract正则提取用法
- android 视频大小压缩,Android视频压缩(亲测有效)方便简单易用
- .mdf mysql数据库,sql server mdf 数据库文件导入 mysql
- 纯净版Win10系统重装教程(超详细)
- Apache Hue基础知识大全
- airodump-ng界面参数比较详细的解释
热门文章
- 【STM32】获取STM32官方固件库
- 2019年中国社交电商行业市场分析:社交电商巨头已浮出水面
- Ubuntu 20.04 Desktop 设置桌面图标大小、间距
- python京东预约抢购_京东抢购脚本js教程
- 低成本2.4G SOC(NYA054E)灯控遥控芯片方案-CI2454/CI2451
- 高性能本地缓存Ristretto(二)——过期策略
- app.json: [“subpackages“][0][“root“] 字段需为 目录
- 频域分析中的三频段理论
- std::thread vs CreateThread
- rk3568和rk3399性能对比 rk3568和rk3399区别