为什么python dict.update()不返回对象?
问题内容:
我正在尝试做:
award_dict = {
"url" : "http://facebook.com",
"imageurl" : "http://farm4.static.flickr.com/3431/3939267074_feb9eb19b1_o.png",
"count" : 1,
}
def award(name, count, points, desc_string, my_size, parent) :
if my_size > count :
a = {
"name" : name,
"description" : desc_string % count,
"points" : points,
"parent_award" : parent,
}
a.update(award_dict)
return self.add_award(a, siteAlias, alias).award
但是,如果觉得该函数确实很麻烦,我宁愿这样做:
return self.add_award({
"name" : name,
"description" : desc_string % count,
"points" : points,
"parent_award" : parent,
}.update(award_dict), siteAlias, alias).award
为什么不更新返回对象,以便您可以链接?
JQuery这样做是为了进行链接。为什么在python中不可接受?
问题答案:
Python大多实现了务实的命令查询分离风格:mutators返回None
(带有务实的异常,例如pop
;-),因此它们不可能与访问器混淆(同样,赋值不是表达式,该语句-
表达式分离,依此类推)。
这并不意味着没有很多方法可以在您真正想要的时候将它们合并,例如,dict(a, **award_dict)
做出一个新的字典,就像您希望.update
返回的那个字典一样。所以,如果您真的觉得很重要,那就为什么不使用THAT ?
编辑 :顺便说一句,在您的特定情况下,无需a
按照以下方式进行创建:
dict(name=name, description=desc % count, points=points, parent_award=parent,
**award_dict)
创建一个与您的语义完全相同的dict
a.update(award_dict)
(包括在发生冲突的情况下,in中的条目award_dict
会覆盖您明确提供的条目的事实;要获取其他语义,即使显式条目“赢得”此类冲突,award_dict
作为唯一的
位置 arg传递, 在 关键字“>” 之前 传递,并丧失**
形式-dict(award_dict, name=name
等)。