はじめに
今回は、Pythonの演算子「or」と「 | 」の使い分けについて解説します。
Pythonの導入や基本操作が行えることを前提で進めます。
↓前提知識はこちらをご覧ください↓
「or」と「 | 」の違い
「or」と「 | 」は下記
・「or」 → 論理演算子
・「 | 」 → ビット演算子
この2つが違いです。
結論だけ言うと…
・if文の条件分岐には「or」か「|」を使う
・ビット関係の処理には「|」を使う
です。
論理演算子の「or」について
論理演算子は “通常” の情報が2つある場合の処理です。
主に「2つ以上の条件があるif文」で使われます。
下図のような形で、2つ以上の条件分岐を繋ぐのが主な用途です。
「or」単体であれば、左右に置いた要素のどちらかが、False以外のとき…
「Ture」や「どちらかの値」を返す処理になります。
↓「Ture」と「False」だけで書いた場合…
2つの値が「False」の時だけ「False」になります。
ちなみにTure/Falseは整数(int)に変換すると下記のようになります。
・Ture → 1
・False → 0
「or」は整数や小数でも設定が可能です。
そして、「or」は片方の値が「0」以外なら、どちらか一方の値を返す。
両方の値が「0」以外の時だけFalse(0)を返す処理になります。
片方の値が「0」でもう片方が「0」以外なら…
「0」以外の方で設定した値を返す。
・両方の数字が「0」以外なら…
どちらかの数字を返す処理のようです。
(何が帰るかまでの条件は特定できませんでした)
ちなみに、整数や小数の値が返されは場合…
0以外であれば、bool型では「Ture」という扱いになります。
なので、-0.01を返す処理でif文を組むと、値がTureになります。
↑if文は()の中身がTureだと実行する処理なので…
if文が実行されました。
以上が、論理演算子の「and」についての解説です。
ビット演算の「 | 」について
ビット演算子は “ビット型” の情報が2つある場合の処理です。
ビットについて、凄く大雑把に解説すると… 「2進数データ」になります。
そして、ビット演算子を使うと…
用意した2つの2進数データを組み合わせて別の2進数データが作れます。
「0b」は、これ以降に書く数字が2進数ですとパソコンに伝えるための記号です。
「|」はそのビット演算子の1つ。
ORの論理回路を元にした演算子で…
2つのビットのうち、片側が立ってる所を「1」にする処理になります。
イメージとしては下図の通り。
これが、ビット演算子「 | 」の効果です。
↓ビットの詳細や他のビット演算子はこちらで解説。
条件分岐では「or」を使う
演算子単体でif文に使うような場合、「or」を使う方が安定します。
下図のような単体の演算子で条件分岐を行う場合は「or」を使った方が良いです。
理由は下記の通り。
・「|」は小数と文字型が使えない
こちらについて解説します。
「|」は小数と文字型が使えない
単体で演算子を使う場合「or」だと小数や文字型が使えます。
「|」だと小数と文字型が使えません。
↓整数(int)と整数(int)なら動きますが…
整数(int)小数(float)を合わせるとエラーが出ます。
小数(float)と小数(float)を合わせても、エラーが出ます。
つまり、小数が使えない事が分かります。
小数(float)と小数(float)を合わせても、エラーが出ます。
つまり、小数が使えない事が分かります。
あとTure/False(bool)と整数「int」の組み合わせも動きます。
が… 文字型は動きません。
以上が、「|」は小数と文字型が使えない事に解説です。
こんな謎処理、めったにやる事は無いですが…
小数と文字型は動かない。
なので、条件分岐などで使うなら「or」を使った方が安定する可能性が高い。
→ 「or」を使うと覚えてください。
2つ以上の要素があるif文は「or」と「|」の両方で動く
2つ以上の条件があるif文は、数字の場合「or」と「|」の両方で動きます。
(0 == 0)のような条件は、その条件になると「Ture」を返す処理になります。
なので (条件1) or(条件2):のような形にした場合
2つの条件は「bool型」で比較する事になります。
「or」だと何一つ問題無く動きます。
そして「|」でも、(==)などで比較した条件の解は「Ture/False」で表示されます。
なので、正しく表示されます。
そして、文字型や小数なども「|」で動きます。
これは(==)や(<)の中で一度処理が行われて「Ture/False」に変換されたのが原因です
なので()で囲った場合…
高確率で、2つ以上の要素があるif文は「or」と「|」の両方で動きます。
以上が、2つ以上の要素があるif文は「or」と「|」の両方で動く事の解説です。
ビット演算では「 | 」を使う
下図のようなビット演算をしたい場合…
「 | 」を使わないと動きません。
「or」を使うと、どちらか一方の値が返されるだけになります。
つまり「or」だとビット演算が行われません。(左側の「0b0011」が返っただけ)
print(bin())は2進数で結果を表示する処理です。
print()は10進数で結果を表示する処理になります。
ちなみに、2進数の「11」は…
10進数に変換すると「3」になります。
なので、ビット演算を行うには「|」を行う必要があります。
ビット演算が行われたので出力結果が「0b1011」になりました。
「|」で処理が下図のように動いたので…
結果が「1011」になってます。
ちなみに、2進数の「1011」は…
10進数に変換すると「11」になります。
まとめ
今回は、Pythonの演算子「or」と「|」の使い分けについて解説しました。
・「or」は2つの値が「0」以外なら、「0」以外の値を返す処理
・「or」は小数と文字型が扱える
・「|」はビット演算に使うための演算子
・「|」は小数と文字型が扱えない
・ビット演算に「or」を使っても、ビット演算の処理は行われないので注意
また、他にもプログラムについて解説してます。
ぜひ、こちらもご覧ください。
コメント