Ho appena scoperto il bitwise complement unary operation in Python tramite this question e ho cercato di creare un'applicazione vera e propria, e in caso contrario, per determinare se è generalmente sicuro sovraccaricare il operatore (ignorando il metodo __invert__
) per altri usi. L'esempio fornito nella domanda non riesce con un TypeError
e il link fornito sembra piuttosto intimidatorio. Ecco alcuni giocherellare in giro per vedere ~
in uso:Applicazioni di '~' (tilde) operator in Python
from bitstring import BitArray
x = 7
print(~x)
# -8
print(BitArray(int=x, length=4).bin)
# '0111'
print(BitArray(int=~x, length=4).bin)
# '1000'
print(~~True, ~~False)
# 1 0
for i in range(-100, 100):
assert i + ~i == -1
assert i^~i == -1
assert bool(i) == ~~bool(i)
Esistono eventuali esempi di validi casi d'uso di questo operatore che dovrei essere a conoscenza? E anche se ci sono, è generalmente accettabile ignorare questo operatore per tipi diversi da int
?
In NumPy/panda, viene utilizzato per elementwise confronto di array. Ad esempio, se "arr = [True, False, True]', '~ arr' restituisce' [False, True, False] '. – ayhan
@ayhan è bello, quindi applica una regola di casting? Sembra che funzioni anche per gli array di interi, ma si scompone quando si combinano 'int's e' bool's: '~ np.array ([1, 0, -1, True, False]) -> array ([ -2, -1, 0, -2, -1]) '. Potrebbe essere usato come un trucco funky per convertire i valori di 'bool' in valori' int' però: '~~ (np.array ([True, False] + [1])) [: - 1] -> array ([1 , 0]) ' – Alec
@Alec O avete una matrice di' bool's o un array di 'int's. Mescolando 'bool's e' int's si ottiene una matrice 'int'. – Bakuriu