我正在使用此功能
obj = myotherobj if obj is None else obj
我看到单词obj
被使用了三次。有没有办法用obj只出现一次来编写该函数
答案 0 :(得分:3)
obj
的1个实例很难,但有很多有趣的方法可以将其减少到2个实例。根据obj
的{{3}},您可以执行此操作:
obj = obj or myotherobj
例如:
>>> obj = []
>>> obj = obj or 9000
>>> obj
9000
>>> obj = None
>>> obj = obj or True
>>> obj
True
或者,如果它是return语句的一部分,您可以将其剪切为一个obj
:
return obj or otherobj
例如:
>>> def foo(x):
... return x or 8
...
>>> foo(4)
4
>>> foo([])
8
>>> foo(0)
8
为了获得额外的乐趣,如果这是一个truthiness,您可以使用数组索引和布尔值来做一些很酷的事情(但这不会减少obj
个令牌的数量:
>>> obj=None
>>> obj=[obj,9000][obj is None]
>>> obj
9000
只是为了好玩,超级荒谬:
>>> obj = None
>>> obj = (obj,[1,2,3])[::cmp(bool(obj),0.5)]
>>> obj
[1, 2, 3]
>>> obj = True
>>> obj = (obj,[1,2,3])[::cmp(bool(obj),0.5)]
>>> obj
True
但是,对于任何合理的生产代码,通常都不推荐以上任何一种。
答案 1 :(得分:1)
if obj is None:
obj = myotherobj
由于Python中没有null-coalescing运算符,因此可能是最好的2次出现。
答案 2 :(得分:0)
你可以把它减少到两个:
if obj is None:
obj = myotherobj
请注意,如果不是“无”,则不需要将obj
分配给任何内容,因为在您的示例中,obj
显然已经设置为您希望它在那种情况下。< / p>
答案 3 :(得分:0)
更好的方法是
obj = myotherobj if not obj else obj
在python 无本身暗示错误时,无需检查“如果obj为无”。