| =(ior)在Python中做什么?

发布于 2021-01-29 17:56:53

Google不允许我进行搜索,|=因此我在查找相关文档时遇到了麻烦。有人知道吗

关注者
0
被浏览
139
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    |=在成对的对象之间执行 就地 +操作。尤其是:

    在大多数情况下,它与|操作员有关。请参阅下面的示例。

    套装

    例如,两个分配的集合的s1并并s2共享以下等效表达式:

    >>> s1 = s1 | s2                                           # 1
    >>> s1 |= s2                                               # 2
    >>> s1.__ior__(s2)                                         # 3
    

    其中的最终值s1等于:

    1. 分配的OR操作
    2. 就地或运算
    3. 通过特殊方法++进行原位或运算

    在这里,我们将OR(|)和就地OR(|=)应用于 集合

    >>> s1 = {"a", "b", "c"}
    >>> s2 = {"d", "e", "f"}
    
    >>> # OR, | 
    >>> s1 | s2
    {'a', 'b', 'c', 'd', 'e', 'f'}
    >>> s1                                                     # `s1` is unchanged
    {'a', 'b', 'c'}
    
    >>> # In-place OR, |=
    >>> s1 |= s2
    >>> s1                                                     # `s1` is reassigned
    {'a', 'b', 'c', 'd', 'e', 'f'}
    

    辞典

    Python 3.9+中,在字典之间提出了新的merge(|)和update(|=)运算符。注意:这些与上述集合运算符不同。

    两个指定的dictd1和之间的给定操作d2

    >>> d1 = d1 | d2                                           # 1
    >>> d1 |= d2                                               # 2
    

    其中d1经由相当于:

    1. 分配的合并权操作
    2. 就地合并权限(更新)操作;相当于d1.update(d2)

    在此,我们将merge(|)和update(|=)应用于 字典

    >>> d1 = {"a": 0, "b": 1, "c": 2}
    >>> d2 = {"c": 20, "d": 30}
    
    >>> # Merge, | 
    >>> d1 | d2
    {"a": 0, "b": 1, "c": 20, "d": 30}
    >>> d1 
    {"a": 0, "b": 1, "c": 2}
    
    >>> # Update, |=
    >>> d1 |= d2
    >>> d1 
    {"a": 0, "b": 1, "c": 20, "d": 30}
    

    专柜

    collections.Counter涉及称为数学数据结构
    多集
    (MSET)。它基本上是(对象,多重性)键值对的决定。

    给定两个分配柜台之间的操作c1c2

    >>> c1 = c1 | c2                                           # 1
    >>> c1 |= c2                                               # 2
    

    其中c1经由相当于:

    1. 指定的联合操作
    2. 就地联合操作

    多集并集包含每个条目的最大重复数。请注意,这与两个集合之间或两个常规字典之间的行为方式不同。

    在这里,我们将union(|)和就地union(|=)应用于 Counters

    import collections as ct
    
    
    >>> c1 = ct.Counter({2: 2, 3: 3})
    >>> c2 = ct.Counter({1: 1, 3: 5})
    
    >>> # Union, |    
    >>> c1 | c2
    Counter({2: 2, 3: 5, 1: 1})
    >>> c1
    Counter({2: 2, 3: 3})
    
    >>> # In-place Union, |=
    >>> c1 |= c2
    >>> c1
    Counter({2: 2, 3: 5, 1: 1})
    

    号码

    最后,您可以进行二进制数学运算。

    在两个分配的数字n1和之间进行给定的运算n2

    >>> n1 = n1 | n2                                           # 1
    >>> n1 |= n2                                               # 2
    

    其中n1经由相当于:

    1. 分配的按位或运算
    2. 就地按位或运算

    在这里,我们将按位OR(|)和就位按位OR(|=)应用于 数字

    >>> n1 = 0
    >>> n2 = 1
    
    >>> # Bitwise OR, |
    >>> n1 | n2
    1
    >>> n1
    0
    
    >>> # In-place Bitwise OR, |=
    >>> n1 |= n2
    >>> n1
    1
    

    评论

    本节简要回顾一些按位数学。在最简单的情况下,按位或运算会比较两个二进制位。1除非两个位均为,否则它将始终返回0

    >>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1)
    >>> assert 0 == (0 | 0)
    

    现在,我们将这个想法扩展到二进制数之外。给定任意两个整数(缺少小数部分),我们应用按位“或”并得到一个积分结果:

    >>> a = 10 
    >>> b = 16 
    >>> a | b
    26
    

    怎么样?通常,按位运算遵循一些“规则”:

    1. 内部比较二进制等效项
    2. 应用操作
    3. 以给定类型返回结果

    让我们将这些规则应用于上面的常规整数。

    (1)比较二进制等效项,在这里视为字符串(0b表示二进制):

    >>> bin(a)
    '0b1010'
    >>> bin(b)
    '0b10000'
    

    (2)对每列应用按位或运算(0当两者均为时0,否则1):

    01010
    10000
    -----
    11010
    

    (3)返回给定类型的结果,例如以10为底的十进制数:

    >>> int(0b11010)
    26
    

    内部二进制比较意味着我们可以将后者应用于任何基数的整数,例如十六进制和八进制:

    >>> c = 0xa                                            # 10
    >>> d = 0o20                                           # 16 
    >>> c | d
    26
    

    也可以看看

    +就位按位或运算符不能应用于文字;将对象分配给名称。

    ++特殊方法返回与其对应运算符相同的操作。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看