6

如果有的话,我想要一个更 Pythonic 的方式用于以下分支:

if a<b:
   a.append('value')
elif a==b:
   b.append('value')
else:
   do nothing

有没有三元运算符?

4

5 回答 5

4

显然你可以不考虑 else 情况

if a<b:
   a.append('value')
elif a==b:
   b.append('value')
于 2013-02-13T10:24:45.767 回答
4

使用嵌套的三元运算符。

func1() if a<b else func2() if a==b else func3()

对于您的具体示例:

a.append('value') if a<b else b.append('value') if a==b else None
于 2013-02-13T10:11:52.153 回答
1

你可以这样做:

result = a<b and first_action or a==b and second_action or third_action

*_action 适合您问题中的“做某事”代码

于 2013-02-13T10:13:35.350 回答
1

您的

if a<b:
   a.append('value')
elif a==b:
   b.append('value')
else:
   do nothing

不能重写太多,就这样就可以了。也许只是删除最后两行(否则/什么都不做)。

我在这里看到的唯一参数化是:

if a <= b:
    (a,b)[a==b].append('value')

但这很丑陋。

于 2013-02-13T10:17:48.103 回答
0

对于您的确切情况,其中之一将起作用:

[b, a, []][cmp(x, y)].append('value')
[b, a, []][cmp(x, y)] += ['value']

请不要这样做。您当前的代码很容易阅读。

于 2013-02-13T10:20:17.480 回答