4

私の理解では、それ&はビット単位のAND演算子です。ですから、論理パズルに適用した場合、それは意味がないと思います。しかし、私はそれを見ます:

>>> False & False
False
>>> False & True
False
>>> True & True
True

等々。他のビット演算子についても同様です。

では、なぜこれらの演算子は論理オペランドを受け入れるのでしょうか。そして、これを説明するドキュメントはどこにありますか?検索しましたが、説明が見つかりませんでした。

4

3 に答える 3

8

では、なぜこれらの演算子は論理オペランドを受け入れるのでしょうか。

boolサブクラス、およびオペランドを返すためのintオーバーライドなど。__and__()boolbool

詳細については、PEP285を参照してください。

具体的には:

      6)boolはintから継承する必要がありますか?

       =>はい

       理想的な世界では、boolは
       混合モードの実行方法を知っている個別の整数型
       算術。ただし、intからboolを継承すると、
       実装が非常に大きい(部分的には、を呼び出すすべてのCコードが
       PyInt_Check()は引き続き機能します-これはtrueを返します
       intのサブクラス)。また、これは正しいと思います
       代替可能性:intを必要とするコードにブール値を与えることができます
       0または1と同じように動作します。
       intが指定されている場合、boolは機能しない可能性があります。たとえば、3&4
       は0ですが、真理と見なすと3と4の両方が真になります
       値。

    class bool(int):

        def __and__(self, other):
            if isinstance(other, bool):
                return bool(int(self) & int(other))
            else:
                return int.__and__(self, other)

        __rand__ = __and__

        def __or__(self, other):
            if isinstance(other, bool):
                return bool(int(self) | int(other))
            else:
                return int.__or__(self, other)

        __ror__ = __or__

        def __xor__(self, other):
            if isinstance(other, bool):
                return bool(int(self) ^ int(other))
            else:
                return int.__xor__(self, other)

        __rxor__ = __xor__

一方、inheritの動作をbool & bool返す方法に注意してください(つまり、を返します)。boolbool & non-boolintint

これらのプロパティを示すいくつかの例を次に示します。

In [12]: isinstance(True, int)
Out[12]: True

In [13]: True & True
Out[13]: True

In [14]: True & 1
Out[14]: 1

上記の動作は、算術演算子には適用されません。それらは単にintの振る舞いを使用します:

In [15]: True + 0
Out[15]: 1

In [16]: True + False
Out[16]: 1
于 2012-12-16T17:37:37.817 に答える
0

「論理」、別名ブール値は、オンまたはオフのいずれかの単一ビットを表すだけなので、もちろんビット単位の操作はそれらに対して機能します。ビット単位の演算が単一ビットで機能しないことを期待する理由は何ですか?

論理演算の継承を逆にします。ビット演算の基本ケースは、ブール値などの単一ビット変数にあります。より大きな値に対するビット演算は、シングルビット演算の拡張アプリケーションにすぎません。

于 2012-12-16T17:37:22.803 に答える
0

Python 3.xでは、TrueとFalseはキーワードであり、常に1と0に等しくなります。

Python 2の通常の状況では、常にPython3の場合。

Falseオブジェクトは、intのサブクラスであるbool型です。

 object
  |
 int
  |
 bool
于 2012-12-16T17:39:22.367 に答える