[解決済み】Pythonのチルダ演算子について
2022-04-01 23:02:17
質問
Pythonのチルダ演算子の使い方は?
例えば、ある文字列が回文かどうかをチェックするような、文字列やリストの両側で何かをすることが考えられます。
def is_palindromic(s):
return all(s[i] == s[~i] for i in range(len(s) / 2))
他に良い使い方があれば教えてください。
解決方法は?
これは単項演算子(引数は1つ)で、すべてのデータ型がバイトの異なる解釈の仕方であるC言語から借用したものです。 これは、入力データのすべてのビットを反転させる、"invert" または "complement" 演算です。
Pythonでは、整数の場合、そのビットは
二重補数表現
のように)整数の逆順になります。
b <- b XOR 1
を各ビットに割り当て、その結果を再び2項補数型の整数として解釈します。 つまり、整数の場合は
~x
は次のように等価です。
(-x) - 1
.
を再定義したものである。
~
演算子は
operator.invert
. この演算子を自作クラスでサポートするには、そのクラスに
__invert__(self)
メソッドを使用します。
>>> import operator
>>> class Foo:
... def __invert__(self):
... print 'invert'
...
>>> x = Foo()
>>> operator.invert(x)
invert
>>> ~x
invert
同じクラスのインスタンスの "complement" または "inverse" を持つことに意味があるクラスはすべて、invert 演算子の候補になりえます。 しかし、演算子のオーバーロードは使い方を誤ると混乱を招くので、演算子を指定する前に本当に意味があるのかどうかを確認してください。
__invert__
メソッドをクラスに追加します。 (ただし、バイト列[ex:
'\xff'
バイト列のすべてのビットを反転させることに意味があるにもかかわらず、この演算子はサポートされていません)。
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
pythonを使ったオフィス自動化コード例
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない