4

我目前有:

tmp = myfunc()
mydict[mykey] = tmp
return tmp

..这似乎有点太长了。在javascript中,我可以这样做:

return (mydict[mykey] = myfunc()) 

上面的 Python 代码是公认的方法,还是有别的方法?

编辑:我知道这样做的可能性:

mydict[mykey] = myfunc()
return mydict[mykey]

..但我不想进行两次密钥查找。除非

4

3 回答 3

12
tmp = mydict[mykey] = myfunc()
return tmp
于 2012-07-03T02:19:14.507 回答
4

如果你想要更少的代码行,你可以这样做:

mydict[mykey] = myfunc()
return mydict[mykey]

但是,赋值不是 Python 中的表达式,因此您不能使用 javascript 版本。


编辑:如果您知道密钥不在字典中,您可以这样做:

return mydict.setdefault(mykey, myfunc())

setdefault是一个查找函数,如果键不在字典中,则将键设置为第二个值。


您还可以编写一个辅助函数:

def set_and_return(d, k, v):
    d[k] = v 
    return v

然后,在其他任何地方,您都可以:

return set_and_return(mydict, mykey, myfunc())
于 2012-07-03T02:11:20.943 回答
2

意见各不相同,但这是我的 0.02 美元。

  1. 请不要使用默认字典。如果我正在阅读您的代码,我可能不知道您知道什么,字典中没有键。稍后有人可能会更新代码并违反这个无声的假设,代码就会中断。
  2. 请不要使用“set_and_return”功能。您的代码可能很聪明,但可读性较差。更多的行,更难遵循,函数查找的成本与 dict 查找相同。
  3. @gnibbler有一个不错的“更少的代码行”解决方案,但我不建议这样做,并且阅读了很多 python 源代码我很少看到这种语法(在函数的开头比其他任何地方都多)

我很欣赏它在 javascript 中是如何发生的,但它是被接受的方式:我投票支持您的原始格式,最容易阅读和理解,并且不比任何其他解决方案更慢或效率更低。

tmp = myfunc()
mydict[mykey] = tmp
return tmp
于 2012-07-03T02:44:26.767 回答