foo() 没有定义.
>>> 0 and foo() (1)
0 # trivial
>>> 0 and foo() or 1 (2) # expecting it as 0 and (foo() or 1)
1 # does NOT short-circuit on 0
>>> 1 or foo() (3) # trivial
1
>>> 1 or foo() and 0 (4) # expecting it as 1 or (foo() and 0)
1 # DOES short-circuit on 1
Run Code Online (Sandbox Code Playgroud)
我没有看到(2)和(4)的一致行为.
如果我们按(2)的评估方式去:
0 and foo() or 1
false or true (1)
true (1)
Run Code Online (Sandbox Code Playgroud)
然后我希望(4)为:
1 or foo() and 0
true and false (0)
false (0)
Run Code Online (Sandbox Code Playgroud)
如果我们按(4)的评价方式去:
1 or foo() and 0
true or ...
true (1)
Run Code Online (Sandbox Code Playgroud)
然后我希望(2)为:
0 and foo() or 1
false and ...
false (0)
Run Code Online (Sandbox Code Playgroud)
and优先级高于or.
0 and foo() or 1 == (0 and foo()) or 1
== 0 or 1 # short-circuited, foo() never evaluated
== 1
Run Code Online (Sandbox Code Playgroud)
1 or foo() and 0 == 1 or (foo() and 0)
== 1 # short-circuited, foo() never evaluated
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |