Я только что открыл bitwise complement unary operation в Python через this question и пытался создать для него фактическое приложение, а если нет, определить, безопасно ли вообще перегружать оператора (путем переопределения метода __invert__
) для других целей. Пример, приведенный в вопросе, терпит неудачу с TypeError
, а предоставленный link кажется довольно устрашающим. Вот некоторые пустячный вокруг, чтобы увидеть ~
в использовании:Приложения оператора '~' (tilde) в 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)
Есть ли какие-либо примеры допустимых сценариев использования для этого оператора, что я должен быть в курсе? И даже если есть, допустимо ли вообще переопределять этот оператор для типов, отличных от int
?
В Numpy/панд, он используется для поэлементно сравнение массивов. Например, если 'arr = [True, False, True]', '~ arr' возвращает' [False, True, False] '. – ayhan
@ Айхан, это круто, поэтому оно применяет правило кастинга? Похоже, он работает и для массивов ints, но разбивается при объединении 'int' и 'bool': '~ np.array ([1, 0, -1, True, False]) -> array ([ -2, -1, 0, -2, -1]). Может использоваться как фанковый трюк для преобразования значений 'bool' в значения' int', хотя: '~~ (np.array ([True, False] + [1])) [: - 1] -> array ([1 , 0]) ' – Alec
@Alec Либо у вас есть массив' bool 'или массив' int '. Смешивание 'bool' и 'int' дает массив 'int'. – Bakuriu