Właśnie odkryłem bitwise complement unary operation w Pythonie poprzez this question i próbowałem wymyślić dla niego konkretną aplikację, a jeśli nie, aby określić, czy ogólnie jest bezpieczne przeciążenie operator (poprzez przesłanianie metody __invert__
) do innych zastosowań. Przykład podany w pytaniu kończy się niepowodzeniem z TypeError
, a dostarczony link wydaje się być dość onieśmielający. Oto niektóre fiddling zobaczyć ~
użytkowej:Zastosowania operatora '~' (tyldy) w Pythonie
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)
Czy istnieją jakieśprzykłady poprawnych przypadków użycia dla tego operatora, który powinien być świadomy? A nawet jeśli tak jest, czy ogólnie dopuszczalne jest zastąpienie tego operatora typami innymi niż int
?
W NumPy/pand, jest on stosowany do elementwise porównanie tablic. Na przykład, jeśli 'arr = [True, False, True]', '~ arr' zwraca' [False, True, False] '. – ayhan
@ayhan to fajne, więc stosuje regułę castingu? Wygląda na to, że działa także dla tablic ints, ale zrywa się, gdy łączymy 'int's i' bool's: '~ np.array ([1, 0, -1, prawda, fałsz]) -> array ([ -2, -1, 0, -2, -1]) '. Może być użyta jako funkowa sztuczka do konwersji wartości 'bool' na' int' wartości: '~~ (np.array ([prawda, fałsz] + [1])) [: - 1] -> tablica ([1 , 0]) ' – Alec
@Alec Albo masz tablicę' bool's lub tablicę 'int's. Mieszanie 'bool's i' int's daje tablicę 'int'. – Bakuriu