小编典典

为什么 python dict.update() 不返回对象?

all

我正在尝试做:

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 中不可接受?


阅读 123

收藏
2022-07-29

共1个答案

小编典典

Python 主要实现了一种实用的命令-查询分离风格:mutators
返回None(带有实用引发​​的异常,例如pop;-),因此它们不可能与访问器混淆(同样,赋值不是表达式,语句-表达式分离,等等)。

这并不意味着当你真正想要的时候没有很多方法可以合并东西,例如,dict(a, **award_dict)制作一个新的字典,就像你希望.update返回的那个 - 所以如果你真的觉得它很重要,为什么不使用它?

编辑 :顺便说一句,在您的特定情况下,无需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等)。

2022-07-29