Python中**操作符的作用:合并字典时dict(d1,**d2)为何可行?
Python中
**操作符在字典合并中的作用 先看你的代码场景(修正了原代码字符串缺失引号的问题):
d1 = {1: 'one', 2: 'two'} d2 = {3: 'three', 4: 'four'} # 报错写法 d3 = dict(d1, d2) # 报错:预期1个位置参数,但传入了2个 # 正常运行写法 d3 = dict(d1, **d2) # 结果:{1: 'one', 2: 'two', 3: 'three', 4: 'four'}
为什么第一种写法报错?
dict()构造函数的参数规则是:要么传一个字典作为唯一的位置参数,要么传多组键值对作为关键字参数,不能直接传入两个字典作为位置参数。dict(d1, d2)不符合这个规则,所以会报错。
**操作符的核心作用
**是Python的关键字参数解包操作符,它的作用是把字典中的键值对“拆解”成独立的关键字参数传递给函数。
在dict(d1, **d2)中:
- 首先,
d1作为位置参数传入,dict()会先复制它的所有键值对 - 然后
**d2把d2里的每一组键值对(比如3: 'three')转换成3='three'这种关键字参数,传递给dict() - 最后
dict()会把这些关键字参数对应的键值对追加到新字典中,如果存在重复的键,d2中的键值会覆盖d1中的对应内容
更简洁的替代写法(Python 3.5+)
Python 3.5及以上版本支持更直观的字典合并语法,效果和dict(d1, **d2)完全一致:
d3 = {**d1, **d2}
内容的提问来源于stack exchange,提问作者Melody Owojori
相关产品推荐
相关产品推荐

