8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

插入符号(^)运算符的作用是什么?

Enes Aksoy 1月前

29 0

今天我遇到了 python 中的插入符号运算符,并尝试了一下,得到了以下输出:>>> 8^311>>> 8^412>>> 8^19>>> 8^08>>> 7^16>...

今天我遇到了 python 中的插入符号运算符,并尝试了一下,得到了以下输出:

>>> 8^3
11
>>> 8^4
12
>>> 8^1
9
>>> 8^0
8
>>> 7^1
6
>>> 7^2
5
>>> 7^7
0
>>> 7^8
15
>>> 9^1
8
>>> 16^1
17
>>> 15^1
14
>>>

它似乎是基于 8 的,所以我猜是某种字节操作?除了它对浮点数的行为很奇怪之外,我似乎找不到太多关于这个搜索站点的信息,有人有这个运算符的链接吗?或者你能在这里解释一下吗?

帖子版权声明 1、本帖标题:插入符号(^)运算符的作用是什么?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Enes Aksoy在本站《python-3.x》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 当你使用该 ^ 运算符时,幕后 __xor__ __xor__

    a^b 相当于 a.__xor__(b) .

    另外, a ^= b 相当于 a = a.__ixor__(b) __xor__ 通过使用隐式调用 __ixor__ 但不存在时, ^= 用作后备

    原则上,它 __xor__ 的作用完全取决于它的实现。Python 中的常见用例有:

    • 对称差集 (所有元素均只出现在两个集合中的一个中)

    演示:

    >>> a = {1, 2, 3}
    >>> b = {1, 4, 5}
    >>> a^b
    {2, 3, 4, 5}
    >>> a.symmetric_difference(b)
    {2, 3, 4, 5}
    
    • 两个整数的位 按位不相等

    演示:

    >>> a = 5
    >>> b = 6
    >>> a^b
    3
    

    解释:

        101 (5 decimal)
    XOR 110 (6 decimal)
    -------------------
        011 (3 decimal)
    
  • 附注:鉴于 Python 将其定义为异或运算,并且方法名称中包含 \'xor\',我认为让该方法执行与异或无关的操作(例如指数运算)是一种糟糕的设计选择。我认为这是一个很好的说明性示例,说明了它如何简单地调用 __xor__ 方法,但真正这样做会是一种不好的做法。

  • 那么,这意味着我可以编写自己的运算符,允许 int 与字符串连接?天哪,python 比我想象的要复杂得多

  • 附带说明一下,这些的 __r*__ 版本(如 __rxor__ 或 __radd__)将从出现在中缀符号右侧的参数中调用,并且仅当对左侧符号的函数的调用不起作用时才会调用。您可以将其视为 try: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol),但 xor 可以被 Python 数据模型中任何可用的中缀运算符替换。

  • 是的,这就是 + 符号能够对列表执行一种操作(连接)同时对数字类型执行另一种操作(数学加法)的原因。在这种情况下,您将在类中覆盖 __add__ 或 __radd__ 方法。

  • 一般来说,符号 ^ 的中 __xor__ or __rxor__ 。无论符号的右侧和左侧放置什么数据类型,都必须以兼容的方式实现此函数。对于整数,这是常见的 XOR 类型为 的 float 类型,没有内置函数定义 int :

    In [12]: 3 ^ 4
    Out[12]: 7
    
    In [13]: 3.3 ^ 4
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-13-858cc886783d> in <module>()
    ----> 1 3.3 ^ 4
    
    TypeError: unsupported operand type(s) for ^: 'float' and 'int'
    

    Python 的一个巧妙之处在于,你可以在自己的类中覆盖此行为。例如,在某些语言中,该 ^ 符号表示指数运算。你可以这样做,举个例子:

    class Foo(float):
        def __xor__(self, other):
            return self ** other
    

    然后类似的操作就会起作用,现在, for instances of Foo only ,该 ^ 符号将表示指数。

    In [16]: x = Foo(3)
    
    In [17]: x
    Out[17]: 3.0
    
    In [18]: x ^ 4
    Out[18]: 81.0
    
  • 这是一个逐位的排他或操作。二进制位运算符在 Python 语言参考的第 5 章 .

  • 它根据需要调用 __x或__() or __rxor__() 方法,对于整数类型执行按位异或。

  • 我认为“如果一个(且只有一个)操作数(计算结果为)真,则结果为真。”并不准确,这是布尔异或的定义

  • 我想补充一下,您可以通过输入 0bX 来计算二进制数,其中 X 是您的二进制数。0b0001、0b0010 等。因此,0b1101 ^ 0b1110 将为您提供 0b0011(或 3)。

  • 一个稍微更具说明性的例子可能包括两个数字在同一位上都有 1,以清楚地表明 1 xor 1 = 0。

  • 这是一个按位异(排他或)。

    当且仅当其参数不同(一个是 True ,另一个是 True ,它的计算结果为 False

    为了证明:

    >>> 0^0
    0
    >>> 1^1
    0
    >>> 1^0
    1
    >>> 0^1
    1
    

    解释一下你自己的一个例子:

    >>> 8^3
    11
    

    这样想想:

    1000  # 8 (binary)
    0011  # 3 (binary)
    ----  # APPLY XOR ('vertically')
    1011  # result = 11 (binary)
    
  • 我在我的解释器(2.5.4)中尝试了这个,并得到:>>> help('^') 没有找到'^'的 Python 文档

  • 01d 1月前 0 只看Ta
    引用 15

    请注意,它对浮点数的行为并不奇怪(它只是不适用于浮点数!)。还请注意,许多人在寻找

返回
作者最近主题: