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 |
今回は、変更不可の変数への代入を紹介しましたが、変更可能な配列の変数を利用時はまた異なる結果となります。変更可能な変数への「参照引き渡し」は配列をを紹介する際に解説したいと思います。
演算子はプログラムの基本
プログラミングを行う上で演算子を利用しないことはないので必ず理解しておきましょう。
- ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説
![ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説 ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説]()
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
![macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る]()
- フリーランスエンジニア・業務委託でフルリモート案件が激減している理由
![フリーランスエンジニア・業務委託でフルリモート案件が激減している理由 フリーランスエンジニア・業務委託でフルリモート案件が激減している理由]()
- Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実
![Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実 Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実]()
- Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた
![Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた]()
- AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか?
![AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか? AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか?]()
- PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと
![PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと]()
- Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ
![Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ]()
- AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方
![AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方 AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方]()
S.E->Weekly Ranking;
S.E->プロフィール;














![Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較 Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較](https://www.programming-se.com/wp-content/uploads/2020/07/スクリーンショット-2020-07-13-0.00.32-300x176.jpg)






