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)
你能给出一个例子,允许在三元组中使用语句可能是危险的还是定义不明确的?
表达式是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,然后递增.对于第二个例子,顺序是周围的其他方法,因此,如果i是1之前,结果是不同的.
在Python中,由于在其他语言中使用这些概念收集的经验,语法禁止这样的事情.
我不太确定这是否完全回答了你的问题,但我希望我至少可以对pythonic方法有所了解.
| 归档时间: |
|
| 查看次数: |
5965 次 |
| 最近记录: |