..
What Does Ior Do In Python
Odoo 코어 모듈의 코드를 살펴보던 중, |=
연산자를 처음 보게 되었다.
조금 헷갈리는 부분이 있어 정리를 해두면 좋을 것 같아, 블로그에 정리하기로 했다.
|= 연산자
|=
연산자는 병합(|
) 및 업데이트(|=
) 연산자이다.
sets, dicts, counters, numbers 타입에서 사용할 수 있다.
sets
>>> s1 = s1 | s2
>>> s1 |= s2
>>> s1.__ior__(s2)
>>> s1 = {"a", "b", "c"}
>>> s2 = {"d", "e", "f"}
>>> s1 | s2
{'a', 'e', 'f', 'b', 'd', 'c'}
>>> s1
{'b', 'a', 'c'}
>>> s1 |= s2
>>> s1
{'a', 'e', 'f', 'b', 'd', 'c'}
dicts
>>> d1 = d1 | d2
>>> d1 |= d2
>>> d1 = {"a": 0, "b": 1, "c": 2}
>>> d2 = {"c": 20, "d": 30}
>>> d1 | d2
{'a': 0, 'b': 1, 'c': 20, 'd': 30}
>>> d1
{'a': 0, 'b': 1, 'c': 2}
>>> d1 |= d2 # d1.update(d2) 와 동일하다
>>> d1
{'a': 0, 'b': 1, 'c': 20, 'd': 30}
⚠️ 주의사항
dicts 타입에서는 3.9 이상의 버전에서만 사용이 가능하다.
만약 3.9 미만의 버전에서 사용하면 아래와 같은 오류가 발생한다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
counters
>>> c1 = c1 | c2
>>> c1 |= c2
>>> import collections as ct
>>>
>>> c1 = ct.Counter({2: 2, 3: 3})
>>> c2 = ct.Counter({1: 1, 3: 5})
>>> c1 | c2
Counter({3: 5, 2: 2, 1: 1})
>>> c1
Counter({3: 3, 2: 2})
>>> c1 |= c2
>>> c1
Counter({3: 5, 2: 2, 1: 1})
numbers
>>> n1 = n1 | n2
>>> n1 |= n2
>>> n1 = 0
>>> n2 = 1
>>> n1 | n2
1
>>> n1
0
>>> n1 |= n2
>>> n1
1
참고
https://docs.python.org/3.9/whatsnew/3.9.html#dictionary-merge-update-operators
https://stackoverflow.com/questions/3929278/what-does-ior-do-in-python