[python] | = (ior)는 파이썬에서 무엇을합니까?

Google에서 검색을 허용하지 않아 |=관련 문서를 찾는 데 문제가 있습니다. 아는 사람 있어요?



답변

|=개체 쌍간에 제자리 + 작업을 수행 합니다. 특히,

대부분의 경우 |운영자 와 관련이 있습니다. 아래 예를 참조하십시오.

세트

예를 들어, 두 개의 할당 된 세트의 노조 s1s2다음 해당하는 표현을 공유 :

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

여기서의 최종 값 s1은 다음 중 하나와 동일합니다.

  1. 할당 된 OR 연산
  2. 제자리 OR 연산
  3. 특별한 방법 ++을 통한 내부 OR 연산

여기서 우리 는 세트에 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'}

>>> # Inplace OR, |=
>>> s1 |= s2
>>> s1                                                     # `s1` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}

사전

Python 3.9 이상 에서는 사전 사이에 새로운 병합 ( |) 및 업데이트 ( |=) 연산자가 제안됩니다. 참고 : 이들은 위에서 언급 한 집합 연산자와 동일하지 않습니다.

두 개의 할당 된 딕셔너리 d1d2:

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

다음을 d1통해 동등합니다.

  1. 지정된 병합 권한 작업
  2. 적절한 병합 권한 (업데이트) 작업 에 상응d1.update(d2)

여기서 우리는 dicts에 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}

카운터

이는 다중 집합 (mset) collections.Counter이라고하는 수학적 데이터 구조와 관련이 있습니다. 기본적으로 (객체, 다중도) 키-값 쌍의 사전입니다.

두 개의 할당 된 카운터 사이에 주어진 연산 c1c2:

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

다음을 c1통해 동등합니다.

  1. 할당 된 노동 조합
  2. 인플레 이스 노조 작업

다중 집합합집합 에는 항목 당 최대 다중도 가 포함됩니다. 이것은 두 세트 사이 또는 두 일반 dict 사이에서와 같은 방식으로 작동하지 않습니다.

여기서 우리는 counters에 union ( |)과 in-place union ( |=)을 적용합니다 .

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})

>>> # Inplace Union, |=
>>> c1 |= c2
>>> c1
Counter({2: 2, 3: 5, 1: 1})

번호

마지막으로 이진 수학을 할 수 있습니다.

두 개의 할당 된 번호 사이에 주어진 연산 n1n2:

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

다음을 n1통해 동등합니다.

  1. 할당 된 비트 OR 연산
  2. 제자리 비트 OR 연산

여기서 우리는 숫자에 비트 OR ( |) 및 제자리 비트 OR ( |=)을 적용 합니다 .

>>> n1 = 0
>>> n2 = 1

>>> # Bitwise OR, |
>>> n1 | n2
1
>>> n1
0

>>> # Inplace Bitwise OR, |=
>>> n1 |= n2
>>> n1
1

리뷰

이 섹션에서는 일부 비트 수학을 간략하게 검토합니다. 가장 간단한 경우, 비트 OR 연산은 두 이진 비트를 비교합니다. 1두 비트가 모두 인 경우를 제외하고 항상 반환 됩니다 0.

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

이제이 아이디어를 이진수 이상으로 확장합니다. 두 정수 (분수 구성 요소가 없음)가 주어지면 비트 OR을 적용하고 정수 결과를 얻습니다.

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

어떻게? 일반적으로 비트 연산은 몇 가지 “규칙”을 따릅니다.

  1. 내부적으로 이진 등가물 비교
  2. 작업을 적용
  3. 주어진 유형으로 결과를 반환

위의 일반 정수에이 규칙을 적용 해 보겠습니다.

(1) 여기에 문자열로 표시된 이진 등가물을 비교합니다 (이진을 0b나타냄) :

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

(2) 각 열에 비트 OR 연산을 적용합니다 ( 0둘 다 0, else 인 경우 1).

01010
10000
-----
11010

(3) 주어진 유형 (예 : 10 진수, 10 진수)으로 결과를 반환합니다.

>>> int(0b11010)
26

내부 이진 비교는 우리가 16 진수와 8 진수와 같은 모든 밑의 정수에 후자를 적용 할 수 있음을 의미합니다.

>>> c = 0xa
>>> d = 0o32
>>> c | d
26

또한보십시오

+ 내부 비트 OR 연산자는 리터럴에 적용 할 수 없습니다. 이름에 개체를 할당합니다.

++ 특수 메서드는 해당 연산자와 동일한 작업을 반환합니다.


답변

Python 및 기타 많은 프로그래밍 언어 |에서 비트 OR 연산 입니다. |=이다 |+=되는 +, 운영 및 asignment의 즉, 조합.

그래서 var |= value줄임말입니다 var = var | value.

일반적인 사용 사례는 두 세트를 병합하는 것입니다.

>>> a = {1,2}; a |= {3,4}; print(a)
{1, 2, 3, 4}


답변

세트와 함께 사용하면 유니온 연산을 수행합니다.


답변

이것은 현재 변수와 다른 변수 간의 OR 연산입니다. 인 T=TrueF=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


답변

할당의 왼쪽 및 오른쪽에 대해 이진 비트 OR을 수행 한 다음 결과를 왼쪽 변수에 저장합니다.

http://docs.python.org/reference/expressions.html#binary-bitwise-operations


답변

비트 OR입니다. 32 |= 10, 그림 32와 10이 이진수 라고 가정 해 봅시다 .

32 = 10 0000
10 = 00 1010

지금 때문에 | 또는, 비트 단위 또는 두 숫자에 대해 수행

즉 1 또는 0-> 1, 0 또는 0-> 0. 계속해서 체인 아래로

10 0000 | 00 1010 = 10 1010.

이제 바이너리를 10 진수 101010 = 42로 변경합니다.

| =의 경우 알려진 예인 x +=5. 그것은 의미 x = x + 5,우리가 경우에 따라서 x |= 5, 그 의미 x = x bitwiseor with 5.


답변

유스 케이스를 제공하려면 (다른 답변과 시간을 보낸 후) :

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단락없이 : 모든 항목을 처리하고 적어도 하나의 성공 등을 기록해야하는 경우 유용 할 수 있습니다.

이 답변 의 경고도 참조하십시오.