python的邏輯運算子 and,or,not 和普通的邏輯運算子( )有何區別?

時間 2021-05-30 22:15:17

1樓:追遠·J

先糾正題主的乙個小錯誤。跟&, |同屬一家的運算子應該是~,而非!。

這個問題還挺有意思——對問題本身的回答其實並不複雜:原則上講,and, or, not針對布林值(True/False)進行運算,就是字面上的與或非的功能,確實可以稱之為邏輯運算子(類似C/C++中的&&, ||, !);而&, |, ~則對應C/C++中所謂的「按位運算子」,一般用於無符號整數,按位對齊後對各個位元進行與或非運算(1視為真,0視為假)

所以至少對Python的內建資料型別來講,這是兩套功能完全不同的運算子,也無需建立什麼特別的聯絡。新手更常使用的顯然是and, or, not,按位運算是學到二進位制表示之後的事情。

再說多一點,這兩套運算子的區別就更大了。

and, or得單拿出來說,它們是所謂「短路運算子」。就and而言,原始的功能應該是

所以原則上講,它們的返回值永遠是某個參與運算的物件本身,不一定是布林值。而當x1, x2, x3已經為布林值的時候,這倆運算的效果就跟邏輯上的「與」「或」一毛一樣了。但當它們是任意型別的物件時,運算結果將依賴於它們做bool(x)的結果。

或者說,依賴於它們的__bool__方法的實現。

not其實比較簡單粗暴,not x等同於not bool(x)。它返回的一定是布林值。

另外,這三個符號是Python的保留關鍵字,它們的功能是永遠不變的。你唯一能改變這套運算行為的方法,是覆寫x.__bool__。

——————手動分割——————

&, |, ~是Python的運算子。以x & y為例,它的行為由x.__and__(y)決定,當x, y是Python內建的整數時,其行為已經被預定義好,就是「按位運算」。

如果時其他的型別,由相應的__and__方法決定。

|對應的方法是__or__,~對應的方法是__not__。注意它們跟上面作為關鍵字的and, or, not無任何關係。

2樓:達達

普通邏輯運算子是怎麼樣的,我並不完全了解。不過python的邏輯運算子,由於它的引數可不一定是個布林型別的值,所以返回值不止簡單的True/False。

以and為例。在python中,and是個比較複雜的運算。具體的過程如下表示:

if a == b:

if bool(a) == bool(b) == Truereturn b

elsereturn a

else:

if bool(a) == Truereturn belsereturn a

3樓:黑色不是黎明

(and,or,not)是邏輯運算子,就是「與」「 或」「 非」。(&.|.!

)是位運算子,位運算子是把數字看作二進位制來進行計算的。在這裡我沒法理解的是幹嘛用單詞來代替,其它語言中基本都是符號例如: &&(與), ||(或), !

(非)。建議看看基礎語法:Python3 運算子 | 菜鳥教程

python如何實現左側的運算子過載?

Kittyhawk 先從myob 1說起,假設myob屬於Myob類,這裡我們過載了 mul class Myob def mul self val print mul 過載了 mul 後我們就可以順利實現myob 1,結果是列印出 mul 但如果把兩者換一下位,1 myob,就會報錯了。這是因為1...

為什麼兩個只含邏輯運算子與,或,非的等價復合命題的對偶也等價?

frankwhoo Let p and q be equivalent compound propositions involving only the operators and,and T and F.Note thatp andq are also equivalent.Use De Morg...

關於python中邏輯運算的小問題

李大師 上面的回答都很好,我也沒什麼必要再回答了,因為最近回答問題比較多,hit到limit,被賬號受限了幾天,對樓主提供乙個連線,你去那跟著看,這樣扣程式,扣幾天就有點心累了。一開始學習可以快速過一遍,然後找小作業做一下,小專案寫一下,然後過程中慢慢解決這些問題。Python 基礎程式設計 嗶哩嗶...