Google не позволит мне искать | = так что у меня возникают проблемы с поиском соответствующей документации. Кто-нибудь знает?
Что делает | = (ior) в Python?
Ответ 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
эквивалентно либо:
- назначенная операция ИЛИ
- операция на месте или
- операция на месте ИЛИ с помощью специального метода
Смотрите также раздел 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-идеях о том, почему использовать |=
для обновления набора.
Ответ 5
Он выполняет двоичное побитовое ИЛИ левой и правой сторон задания, затем сохраняет результат в левой переменной.
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
Ответ 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.