在python三元条件的两侧使用语句

wim*_*wim 11 python syntax ternary

为什么禁止在python的三元条件的任何一方使用语句?我看不出任何明显的原因,以下几个天真的语法示例可能是模糊或破坏的 - 但我确信必须有一个很好的理由为什么它被禁止!

>>> x, y = 0, 0
>>> (x += 1) if random.choice([0, 1]) else (y += 1)
        ^
SyntaxError: invalid syntax

>>> (x if random.choice([0, 1]) else y) += 1
SyntaxError: can't assign to conditional expression


>>> print 'hello world' if random.choice([0, 1]) else raise StandardError()
  File "<stdin>", line 1
    print 'hello world' if random.choice([0, 1]) else raise StandardError()
                                                          ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

你能给出一个例子,允许在三元组中使用语句可能是危险的还是定义不明确的?

Tho*_*anz 7

表达式是eval有用的,声明是exec有用的.这是完全不同的东西.

Python开发人员决定严格区分表达式和语句.这将使您"提前失败",而不是以难以调试的错误结束.

在其他语言中,比如C(++),你可以做类似的事情

if (i=15) {...}
Run Code Online (Sandbox Code Playgroud)

但你也可以这样做

if (i==15) {...}
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,您为变量赋值15,然后由此计算i此新值.iif

更糟糕的是增量/减量运算符.有什么区别

if (i--) {...}
Run Code Online (Sandbox Code Playgroud)

if (--i) {...}
Run Code Online (Sandbox Code Playgroud)

对于第一个示例,计算值i,然后递增.对于第二个例子,顺序是周围的其他方法,因此,如果i1之前,结果是不同的.

在Python中,由于在其他语言中使用这些概念收集的经验,语法禁止这样的事情.

我不太确定这是否完全回答了你的问题,但我希望我至少可以对pythonic方法有所了解.