Python 演算子
プログラムで値を代入したり、四則演算の足し算や引き算の計算に利用する記号が「演算子」です。
この記事の著者 ->S.E; です。
メインとしている言語はPHPですが、この先、機械学習やAIなどで利用されているPythonを習得したいと考えています。
このページは「ゼロから始めるPythonプログラミング学習」としてPythonの基本的な部分から学習を始めたいと思います。
最終的にはWebでの利用やアプリの開発、機械学習、AI、簡単なゲームなどのプログラミングを目指したいと思います。
また、参考になる書籍なども紹介しています。
値の代入 「=」代入演算子
変数や定数はPythonプログラミング学習でも既に出てきましたが、変数・定数に文字列や数値を代入するための演算子が「=」です。
数学での「=」とは意味合いが異なります。
1 2 3 4 5 6 7 | >>> str = '文字列の代入' >>> print(str) 文字列の代入 >>> int = 123 >>> print(int) 123 >>> |
算術演算子
下記はPythonで利用する算術演算子です。
演算子 | 内容 | 例(式 → 結果) |
---|---|---|
+ | 加算(足し算) | 2 + 6 → 8 |
– | 減算(引き算) | 5 – 3 → 2 |
* | 乗算(掛け算) | 3 * 4 → 12 |
** | べき乗 | 2 ** 3 → 8 |
/ | 除算(割り算) | 5 / 2 → 2.5 |
// | 除算(割り算:切り捨て) | 5 // 2 → 2 |
% | 剰余(割り算の余り) | 15 % 2 → 1 |
実際にPythonで演算し結果をprintしたものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> print(2+6) 8 >>> print(5-3) 2 >>> print(3*4) 12 >>> print(2**3) 8 >>> print(5/2) 2.5 >>> print(5//2) 2 >>> print(15%2) 1 |
データ型による挙動の違い
「Python データ型」でも解説した内容ですが、データ型によって挙動が異なる例を紹介します。
通常「10」と「5」を足し算「10 + 5」すると結果は「15」ですが、データ型が「文字列」の場合は結果が異なります。
1 2 3 4 | >>> str01 = '10' >>> str02 = '5' >>> print(str01 + str02) 105 |
文字列の「10」と文字列の「5」を足すと結果は「105」となります。足し算が行われるのではなく文字列が連結される結果となります。
ちなみに「減算」した場合はエラーとなります。
1 2 3 4 5 6 | >>> str01 = '10' >>> str02 = '5' >>> print(str01 - str02) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for -: 'str' and 'str' |
また、文字列と整数を演算してもエラーとなります。
1 2 3 4 5 6 | >>> str01 = 10 >>> str02 = '5' >>> print(str01+str02) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' |
PHPやJavaScriptは異なる型を演算しても自動で型を変換してくれますが、Pythonではデータ型を揃えてから演算する必要があります。
面倒なようにも思えますが、「自動で型の変換を行う」処理によりバグが発生することもあるので、変数や定数のデータ型は曖昧にするのではなくしっかりと決めて処理する癖をつけるのが望ましいと思います。
浮動小数点を含んだ演算時の注意点
浮動小数点(1以下の数値 0.1や0.5など)を含んだ演算を行なった際、思った結果を得られないことがあります。
1 2 3 4 | >>> int01 = 0.2 >>> int02 = 3 >>> print(int01*int02) 0.6000000000000001 |
上記のように「0.2 * 3」の演算は「0.6」の結果を得られると思いますが、Pythonでの演算の結果は「0.6000000000000001」となります。
これはPythonが内部的に数値を「10進数」ではなく「2進数」で演算するために起きる「誤差」となります。
この誤差を生じさせずに計算したい場合は「Decimal型」を利用します。
数値の代入前に「import decimal」を記述し「Decimal型」を利用できる状態にし、変数に数値を代入する際「decimal.Decimal()」を利用して代入します。この代入時は数値を「’」で囲む必要があります。
1 2 3 4 5 | >>> import decimal >>> int01 = decimal.Decimal('0.2') >>> int02 = decimal.Decimal('3') >>> print(int01*int02) 0.6 |
「=」以外の代入演算子
Pythonには最初に紹介した「=」以外にも代入演算子が存在します。
演算子 | 内容 | 例 |
---|---|---|
+= | 左辺と右辺を加算した結果を、左辺に代入 | x = 5 x += 2 → 7 |
-= | 左辺と右辺を減算した結果を、左辺に代入 | x = 5 x -= 2 → 3 |
*= | 左辺と右辺を乗算した結果を、左辺に代入 | x = 5 x *= 2 → 10 |
**= | 左辺と右辺をべき乗した結果を、左辺に代入 | x = 5 x **= 2 → 25 |
/= | 左辺と右辺を徐算した結果を、左辺に代入 | x = 5 x /= 2 → 2.5 |
//= | 左辺と右辺を徐算した整数部分を、左辺に代入 | x = 5 x //= 2 → 2 |
%= | 左辺と右辺を徐算した余りを、左辺に代入 | x = 5 x %= 2 → 1 |
&= | 左辺と右辺をビット論理積した結果を、左辺に代入 | x = 10 x &= 2 → 2 |
^= | 左辺と右辺をビット排他論理和した結果を、左辺に代入 | x = 10 x ^= 2 → 8 |
|= | 左辺と右辺をビット論理和した結果を、左辺に代入 | x = 10 x |= 2 → 10 |
>>= | 左辺と右辺の値だけを左にシフトした結果を、左辺に代入 | x = 10 x >>= 2 → 2 |
<<= | 左辺と右辺の値だけを右にシフトした結果を、左辺に代入 | x = 10 x <<= 2 → 40 |
代入演算子「=」は全て参照の引き渡し
「=」を利用して変数への代入は「参照引き渡し」と言います。
代入された値はコンピュータのメモリに保存されます。これを変数を利用しメモリ上のアドレスのようなものから値を呼び出します。
下記はメモリ上のID(識別値)をそれぞれ表示したものです。変数「a」と変数「b」はそれぞれ異なるID(識別値)を持っているのがわかります。
1 2 3 4 5 6 | >>> a = 100 >>> b = 200 >>> print(id(a)) 4455847360 >>> print(id(b)) 4455850560 |
次に変数「b」に変数「a」を代入した場合はどのような結果になるでしょうか?
結果は変数「a」「b」ともに同じアドレス(識別値)となりました。
これが「参照の引き渡し」となります。
1 2 3 4 5 6 | >>> a = 100 >>> b = a >>> print(id(a)) 4455847360 >>> print(id(b)) 4455847360 |
今回は、変更不可の変数への代入を紹介しましたが、変更可能な配列の変数を利用時はまた異なる結果となります。変更可能な変数への「参照引き渡し」は配列をを紹介する際に解説したいと思います。
演算子はプログラムの基本
プログラミングを行う上で演算子を利用しないことはないので必ず理解しておきましょう。
S.E->お勧め記事;
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- プログラマー になる為に必要な プログラミング以外 の知識・スキル
- PHPフレームワーク「Laravel」Bladeテンプレートを利用する
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
- CrowdWorks いつの間にか「プロクラウドワーカー」になっていた
- CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説
- Panic Nova 購入から1年が過ぎライセンスの更新時期の注意点
- Shopify APIを利用して在庫管理を行う
- PHPフレームワーク「Laravel」PHPテンプレートを利用する