目標
「演算子」と「被演算子」について理解する。
「演算子と式の優先度」について理解する。
Pythonの基礎(演算子)
「プログラミングの学習」では「変数」や「制御構造」または「クラス」などが思い浮かびますが、それらの学習の前に必要となるのがプログラムで利用される「記号」の知識です。この「記号」について知ることで、プログラミング学習をよりスムーズにすることができます。
「演算子」と「被演算子」
「演算子の利用」
「演算子」を学習する前に「インタラクティブシェル(python console)」に次のように入力します。計算結果が返ってきているのが確認できます。
「演算子」
「演算子」とは、四則演算(足し算・引き算・掛け算・割り算など)や値の比較、値の法則を求める論理などで利用される「記号」のことです。「演算子」には以下の種類があります。「演算子」は「operator(オペレーター)」ともいいます。
演算子 | 用途 |
算術演算子 | 四則演算を行うため |
比較演算子 | 値を比較して真偽値を返すため |
論理演算子 | 値の法則を導くため |
連結演算子(結合演算子) | 文字列と文字列を結合するため ※ pythonでは数値と文字列の結合には利用できない |
「算術演算子」
算術演算子には「加算」「減算」「乗算」「除算」「剰余」「累乗」などがあります。
算術演算子 | 意味 |
+ | 左右の値を加算します。(加算) |
– | 左右の値を減算します。(減算) |
* | 左右の値を乗算します。(掛け算)(乗算) |
/ | 左右の値を除算します。(割り算)(除算) |
// | 左右の値を除算して「商」を求めます。(切り捨て除算) |
% | 左右の値を除算して「余り」を求めます。(剰余) |
** | 左の値を右の回数累乗します。(累乗) |
「被演算子」
「被演算子」とは演算の対象となる「値」のことです。これを「operand(オペランド)」ともいいます。「被演算子」は次の部分となります。
「演算子と式の優先度」
「演算子」には優先度があり、優先度の異なる演算子や式が並んだ場合には優先度の高い演算を先に行うようになっています。単純な計算を行う演算でよく利用されるのは「1」の式結合、「4」から「7」の算術演算子、「18」の代入文(文法上は演算子ではありません)です。
優先度 | 演算子 | 意味 |
1 | () 、[]、 {key: value}、{} | 式結合(タプル表記)、リスト表記、 辞書表記、集合表記 |
2 | x[n]、x[n:m]、 x(args *kwargs) x.attr | インデックス、スライス、 関数呼び出し、属性参照 |
3 | await 式 | await 非同期(処理の一時停止) |
4 | ** | 累乗 |
5 | +x、-x、~x | 正の数(単項+)、負の数(単項-)、ビット反転 |
6 | *、/、//、%、@ | 乗算、除算、切り捨て除算、剰余、行列乗算 |
7 | +、- | 加算、減算 |
8 | <<、>> | シフト演算(左シフト、右シフト) |
9 | & | ビット論理積(AND) |
10 | ^ | ビット排他的論理和(XOR) |
11 | | | ビット和(OR) |
12 | in、not in、is、is not、 >、>=、<、<=、!=、==、<> | 比較(帰属性判定、同一性判定、値比較) |
13 | not x | 論理否定(NOT) |
14 | and | 論理積(AND) |
15 | or | 論理和(OR) |
16 | if … elif … else | 条件 |
17 | lambda | ラムダ |
18 | =、:= | 代入文、代入式 ※ 文法上は演算子ではありません |
例えば次のような計算を行う場合、演算の順番は次のように変化します。
まず、大前提として、プログラムは「上から下へ」そして「左から右へ」読まれていきます。下の式の場合は、プログラムは一行なので左から順番に読まれていきます。
順番として「answer」が読まれ、「=」が読まれます。この時、代入文の「=」が読まれます。そうすると次の被演算子「6」と次の演算子「+」までを読み取り、「=」と「+」の優先度を比べます。
answer = 6 + 7 – 5 * (-4) * (4 + 6 / 3) + 5
ふたつの演算子の優先度から「+」が優先される演算なので、さらに次の演算子まで読まれます。
answer = 6 + 7 – 5 * (-4) * (4 + 6 / 3) + 5
「+」と「-」は優先度が同じなので6+7が処理されます。
式は次のように変化してさらに右側を読んでいきます。今度は「-」と「*」で優先度を比較します。「*」の方が優先度が高いので計算は後ろへ移動します。
answer = 13 – 5 * (-4) * (4 + 6 / 3) + 5
続けて括弧式が読まれます。括弧式の中では負の数を表す式が入っています。その後、演算子まで読まれます。
answer = 13 – 5 * (-4) * (4 + 6 / 3) + 5
同じ優先度の「*」があるので、この前までが処理されます。
answer = 13 – (-20) * (4 + 6 / 3) + 5
更に右側を読んでいきます。
answer = 13 – (-20) * (4 + 6 / 3) + 5
()括弧式があるのでこの中の計算が優先されます。
answer = 13 – (-20) * (4 + 6 / 3) + 5
「+」と「/」では「/」の方が優先度が高いので、こちらに処理が移されます。
answer = 13 – (-20) * (4 + 6 / 3) + 5
括弧内の計算が行われます。
answer = 13 – (-20) * (4 + 2.0) + 5
次の「+」まで読まれます。「*」の方が優先度が高いためこちらが処理されます。
answer = 13 – (-20) * (6.0) + 5
answer = 13 – (-120.0) + 5
「-」と「+」は優先度が同じため「-」が処理されます。
answer = 13 – (-120.0) + 5
answer = 133.0 + 5
更に右側を読みます。
answer = 138.0
最後に優先度の最も低い代入文が処理され「変数」と「値」が紐づけられます。
今回は以上になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。