簡體   English   中英

是`a

[英]Is `a<b<c` valid python?

我很好奇我是否可以使用a<b<c作為條件而不使用標准a<b and b<c 所以我試了一下,我的測試結果通過了。

a = 1
b = 2
c = 3

assert(a<b<c) # In bounds test
assert(not(b<a<c)) # Out of bounds test
assert(not(a<c<b)) # Out of bounds test

只是為了更好的衡量,我嘗試了更多的數字,這次是在負區域。 其中a, b, c = -10, -9, -8 測試再次通過。 即使是更高范圍的測試服也適用於 a a, b, c = 10, 11, 12 甚至a, b, c = 10, 20, 5

並在 C++ 中完成了相同的實驗。 這是我的心態:

#include <iostream>

using namespace std;

int main()
{
    int a,b,c;
    a=10;
    b=20;
    c=5;
    cout << ((a<b<c)?"True":"False") << endl; // Provides True (wrong)
    cout << ((a<b && b<c)?"True":"False") << endl; // Provides False (proper answer)
    return 0;
}

我最初認為這個實現是無效的,因為在我遇到的所有其他語言中,它都會在到達c之前評估一個布爾值。 對於這些語言, a<b將評估為布爾值並繼續評估b<c將無效,因為它會嘗試根據數字評估布爾值(很可能會引發編譯時錯誤或偽造預期的比較)。 出於某種原因,這讓我有點不安。 我想我只需要確信這是語法的一部分。 提供 Python 文檔中提供此功能的位置的參考也很有幫助,這樣我就可以了解他們在多大程度上提供了這樣的功能。

在此處記錄

形式上,如果 a, b, c, ..., y, z 是表達式並且 op1, op2, ..., opN 是比較運算符,那么 a op1 b op2 c ... y opN z 等價於 a op1 b和 b op2 c 和 ... y opN z,除了每個表達式最多計算一次。

而且,作為一個例子,

比較可以任意鏈接,例如,x < y <= z 等價於 x < y 和 y <= z,除了 y 只計算一次(但在這兩種情況下,當找到 x < y 時根本不計算 z是假的)。

Python“自然地”鏈接關系運算符。 請注意,Python 的關系運算符包括inis (及其否定),當將它們與符號關系運算符混合時,可能會導致一些令人驚訝的結果。

a <b <c
它執行如下

(a <b)<c
(假)<c =>(0)<c
真正.....
這件事發生在你身上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM