8.4. Operator Logical

  • not

  • and

  • or

  • xor

  • invert

  • neg

  • pos

8.4.1. SetUp

>>> from dataclasses import dataclass

8.4.2. Example

>>> @dataclass
... class Vector:
...     x: int
...     y: int
...
...     def __and__(self, other): ...  # &
...     def __or__(self, other): ...   # |
...     def __xor__(self, other): ...  # ^
...     def __invert__(self): ...      # ~

#%% Use Case - 1

crew1 = {'Mark', 'Melissa', 'Rick'} crew2 = {'Alex', 'Beth', 'Chris'}

# Sumowanie zbiorów (set) result = crew1 | crew2

# Do zbioru crew1 dodajemy elementy z crew2 crew1 |= crew2

#%% Use Case - 2 # od Python 3.9

crew1 = {'botanist':'Mark', 'commander':'Melissa', 'pilot':'Rick'} crew2 = {'chemist':'Alex', 'engineer':'Beth', 'medic':'Chris'}

# Sumowanie dictów result = crew1 | crew2

# Do dict crew1 dodajemy elementy z crew2 crew1 |= crew2

8.4.3. Use Case 0x03

>>> import numpy as np
>>>
>>> a = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> (a>5)
array([[False, False, False],
       [False, False,  True],
       [ True,  True,  True]])
>>> ~(a>5)
array([[ True,  True,  True],
       [ True,  True, False],
       [False, False, False]])

8.4.4. Use Case 0x04

>>> import numpy as np
>>>
>>> a = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> (a>3) & (a<7)
array([[False, False, False],
       [ True,  True,  True],
       [False, False, False]])
>>> ((a>3) & (a<7)) | (a%2==0)
array([[False,  True, False],
       [ True,  True,  True],
       [False,  True, False]])
>>> ~(((a>3) & (a<7)) | (a%2==0))
array([[ True, False,  True],
       [False, False, False],
       [ True, False,  True]])
>>> a.__gt__(3).__and__(a.__lt__(7)).__or__(a.__mod__(2).__eq__(0)).__invert__()
array([[ True, False,  True],
       [False, False, False],
       [ True, False,  True]])