如何在python条件循环中省略多余的单词

2024-10-04 05:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用这个函数

    obj = myotherobj if obj is None else obj

我看到obj这个词用了三次。有没有办法在obj只出现一次的情况下编写这个函数


Tags: 函数noneobjifis情况else办法
3条回答

你可以把它减少到两个:

if obj is None:
    obj = myotherobj

注意:如果obj不是None,则不需要将它赋给任何对象,因为在您的示例中obj显然已经被设置为您希望的值。你知道吗

if obj is None:
    obj = myotherobj

由于Python中没有空合并操作符,因此2次出现可能是最好的结果。你知道吗

把它降到1个令牌实例obj是很困难的,但是有很多有趣的方法可以把它降到2个实例

根据objtruthiness,可以执行以下操作:

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

如果这是一个code-golfing problem,您可以使用数组索引和布尔值做一些很酷的事情(但这不会减少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

但是以上两种方法通常都不推荐用于任何正常的生产代码。你知道吗

相关问题 更多 >