我正在尝试做:
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;-),因此它们不可能与访问器混淆(同样,赋值不是表达式,语句-表达式分离,等等)。
None
pop
这并不意味着当你真正想要的时候没有很多方法可以合并东西,例如,dict(a, **award_dict)制作一个新的字典,就像你希望.update返回的那个 - 所以如果你真的觉得它很重要,为什么不使用它?
dict(a, **award_dict)
.update
编辑 :顺便说一句,在您的特定情况下,无需a一路创建:
a
dict(name=name, description=desc % count, points=points, parent_award=parent, **award_dict)
创建一个与您的语义完全相同的单个字典a.update(award_dict)(包括,在发生冲突的情况下,条目award_dict覆盖您明确给出的条目这一事实;获得其他语义,即明确条目“赢得”此类冲突,award_dict作为唯一的 位置 参数传递, 在 关键字 one 之前,并且没有**形式 –dict(award_dict, name=name等)。
a.update(award_dict)
award_dict
**
dict(award_dict, name=name