演算子
代数演算子
code: python
+a # 正数
-a # 負数
a + b # 加算
a - b # 減算
a * b # 乗算
a / b # 除算
a % b # 剰余算 a を b で割った余り
a ** b # 冪乗 a の b 乗
a // b # 切り捨て除算
ビット演算子
code: python
~a # ビット反転
a & b # AND:論理積(aもbも1のビットが1)
a | b # OR:論理和(aまたはbが1のビットが1)
a ^ b # XOR:排他的論理和(aまたはbが1のビットが1)
a << b # b ビット左シフト
a >> b # b ビット右シフト
※ 通常、ビット演算には2進数表現の数値を使います。頭に0b をつけると2進数を表現することができます。またbin()で10進数(普通の整数)を2進数表示できます。
code:python
>> 0b1100
12
>> bin(3)
'0b11'
>> bin(0b10010010 & 0b10100111)
'0b10000010'
代入演算子
code: python
a = b # a に b を代入する
a += b # a = a + b と同じ
a -= b # a = a - b と同じ
a *= b # a = a * b と同じ
a /= b # a = a / b と同じ
a %= b # a = a % b と同じ
a **= b # a = a ** b と同じ
a //= b # a = a // b と同じ
a &= b # a = a & b と同じ
a |= b # a = a | b と同じ
a ^= b # a = a ^ b と同じ
a <<= b # a = a << b と同じ
a >>= b # a = a >> b と同じ
比較演算子
code: python
a == b # a が b と等しい
a != b # a が b と異なる
a < b # a が b よりも小さい
a > b # a が b よりも大きい
a <= b # a が b 以下である
a >= b # a が b 以上である
a is b # a が b と等しい
a is not b # a が b と異なる
a in b # a が b に含まれる
a not in b # a が b に含まれない
ブール演算子
code: python
a and b # a も b も真であれば真
a or b # a または b が真であれば真
not a # a が偽であれば真
ブール演算子を使って変数に代入することもできます。
code: python
c = a and b # a が偽であれば a が、a が 真であれば b が代入される
c = a or b # a が真であれば a が、a が 偽もしくはNoneであれば b が代入される
これはブール演算は左から右に評価されることによります。
ブール演算子 or の記述は、変数に値がセットされていないときのデフォルト値とするような場合に使われることがあります。
条件演算子(三項演算子)
次の文は c が真値であれば x を返し、偽値であれば y を返します。
code: python
x if c else y
演算子の優先順序
code: python
# 優先順位が高い
**
+ - ~x # (+と-は単項演算子)
* / % //
+ -
<< >>
&
^
|
< <= > >= == != <> is is not in not in
not
and
or
# 優先順位が低い
-9 ** 2 では ** が - より優先されて評価されるので結果は -81 になります。
丸括弧(()) で囲むと優先順序を変えることができます。
code: python
>> -9**2
-81
>> (-9)**2
81
演算子 is と == は同じではない
Python の演算子で is と == はよく使用されるものです。
これについてもう少し考察してみましょう。
代入によって作成されたオブジェクトであれば、この2つは同じ結果となります。
code: python
>> b = a
>>
>> a == b
True
>> a is b
True
では、次にlist() で作ったリストオブジェクトで試してみましょう。
code: python
>> a == b
True
>> a is b
False
これは、なぜなんでしょうか?
よく間違いやすいことなのですが、Python ではこの2つ演算子は同じではありません。
== は2つの変数が同じ値を持つオブジェクトの場合にTrue
is は2つ変数が同じオブジェクトの場合にTrue