Подтвердить что ты не робот

Что делает | = (ior) в Python?

Google не позволит мне искать | = так что у меня возникают проблемы с поиском соответствующей документации. Кто-нибудь знает?

4b9b3361

Ответ 1

В Python и многих других языках программирования, | это побитовая операция ИЛИ |= это к | как += означает +, то есть сочетание операции и присвоения.

var |= value сокращенно от var = var | value var = var | value

Ответ 2

При использовании с наборами он выполняет операцию объединения.

Ответ 3

Это просто операция ИЛИ между текущей переменной и другой. Быть T=True и F=False, графически отображать вывод:

r    s    r|=s
--------------
T    T    T
T    F    T
F    T    T
F    F    F

Например:

>>> r=True
>>> r|=False
>>> r
True
>>> r=False
>>> r|=False
>>> r
False
>>> r|=True
>>> r
True

Ответ 4

|= Выполняет Inplace, побитовое ИЛИ операции, а также выполняет накидную работу наборов Python.

Например, объединение двух множеств x и y делят следующие эквивалентные выражения:

>>> x = x | y                                              # (1)
>>> x |= y                                                 # (2)
>>> x.__ior__(y)                                           # (3)

где окончательное значение x эквивалентно либо:

  1. назначенная операция ИЛИ
  2. операция на месте или
  3. операция на месте ИЛИ с помощью специального метода

Смотрите также раздел B.8 Dive в Python 3 о специальных методах операторов Python.


Вот несколько примеров, сравнивающих OR (|) и встроенное OR (|=), примененное к наборам:

>>> x = {"a", "b", "c"}
>>> y = {"d", "e", "f"}

>>> # OR, | 
>>> x | y
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> x                                                      # 'x' is unchanged
{'a', 'b', 'c'}

>>> # Inplace OR, |=
>>> x |= y
>>> x                                                      # 'x' is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}

Вот пример перегрузки __ior__() для итерации итераций в абстрактном базовом классе MutableSet. См. Также субкласс и применяется в рецепте Raymond Hettinger OrderedSet (см. Строки 3 и 10 соответственно). Вот ветка о Python-идеях о том, почему использовать |= для обновления набора.

Ответ 6

Чтобы привести пример использования (потратив время на другие ответы):

def process(item):
   return bool(item) # imagine some sort of complex processing taking place above

def any_success(data): # return True if at least one is successful
    at_least_one = False
    for item in data:
       at_least_one |= process(item)
    return at_least_one

>>> any_success([False, False, False])
False
>>> any_success([True, False, False])
True
>>> any_success([False, True, False])
True

В основном any без короткого замыкания: может быть полезно, если вам нужно обработать каждый элемент и записать хотя бы один успех и т.д.

Смотрите также предостережения в этом ответе

Ответ 7

Это побитовое или. Пусть, скажем, 32 |= 10, изображение 32 и 10 двоично.

32 = 10 0000
10 = 00 1010

Теперь, потому что | есть или, делать поразрядные или на двух числах

т.е. 1 или 0 → 1, 0 или 0 → 0. Продолжайте это вниз по цепочке

10 0000 | 00 1010 = 10 1010.

Теперь измените двоичный код на десятичную, 10 1010 = 42.

Для | =, рассмотрим известные примеры, x +=5. Это означает, что x = x + 5, поэтому, если мы имеем x |= 5, это означает x = x bitwiseor with 5.

Ответ 8

В Python | = (ior) работает как операция объединения. например, если x = 5 и x | = 5, то оба значения сначала преобразуются в двоичное значение, тогда операция объединения будет выполняться, и мы получим ответ 5.