Pythonのインクリメント操作はどのように行うのですか?もしあなたがC++やJavaのような言語から来たのであれば、Pythonにも同様のインクリメント機能を拡張してみようと思うかもしれません。
しかし、この記事で見るように、これは全く同じではありません。
Pythonでインクリメント(++)演算の似たような機能をどのように使ってみるか見てみましょう。
Pythonインクリメント
正確な違いを説明する前に、Pythonでどのように変数をインクリメントするかを見てみましょう。
以下のコードは、ほとんどすべてのプログラマがPythonで整数や類似の変数をインクリメントする方法を示しています。
>>> a = 10
>>> print(a)
10>>> a += 1
>>> print(a)
11>>> a += 100
>>> print(a)
111>>> b = 'Hello'
>>> b += 1
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> b += ' from Python'
>>> b'Hello from Python' |
ここでは、整数型変数 a を順次インクリメントしています。
また、+ 演算子は文字列の連結を意味するので、文字列に追加することもできます。
a++を使って、a` を 1 だけ増加させることはできるでしょうか。
>>> a++
File "<stdin>", line 1
a++
^
SyntaxError: invalid syntax |
ここで問題があります。
Pythonは設計上、++という “演算子 “を使うことができないのです。
C++やJavaではインクリメント演算子と呼ばれる ++ という用語は、Pythonには存在しません。
なぜ Python には ++ 演算子がないのですか?
これを詳しく理解したい場合は、プログラミング言語設計のバックグラウンドを持っている必要があります。
Pythonに++演算子を入れないという選択肢は、設計上の決定事項なのです。
Python言語の機能作成を担当する人たちは、CPPスタイルのインクリメント演算子を導入する必要はないと考えたのです。
Pythonインタプリタが入力から a++ シンボルをパースするとき、次のように解釈されます。
- 二項演算子
+は加算演算子なので、a++はa,+,+として処理されます。しかし、Python は最初の+演算子の後に数字が来ることを期待しています。したがって、2番目の+は数字ではないので、a++はシンタックスエラーになります。
同様に、プリインクリメントの ++a は次のように扱われます。
- Python の単項演算子
+は、identity 演算子を指します。これは単純にその後ろの整数を返します。このため、整数に対する恒等式演算となります。 - 例えば、
+5の値は単に5であり、+-5の場合は-5となります。これは単項演算子で、実数に対して働きます。 -
++aは + と+aとして解析されますが、2番目の+aは再び(+a)として扱われ、単純にaとなります。 - したがって、
+(+(a))は単純にaと評価されます。
つまり、a の値を 1 つ増やしたかったとしても、この種の演算子は存在しないので、++ 記号を使用してこれを達成することはできません。
したがって、この種のインクリメントを行うには += 演算子を使用する必要があります。
a += 1
a -= 1
|
同じ論理がデクリメント演算にも当てはまります。
この記事もチェック:Pythonの論理演算子の記号やif文での使い方を解説する
+=演算はどのように評価されるのですか?
記号があるので、これは代入文なのではと思うかもしれません。
しかし、これは通常の代入文ではありません。
これは補強された代入文と呼ばれます。
通常の代入文では、まず右辺が評価され、その後に左辺に代入されます。
# 2 + 3 is evaluated to 5, before assigning to aa = 2 + 3
|
しかし、この拡張代入文では、右辺を評価する前に左辺を先に評価します。
これは、更新された値をインプレースで左辺に書き込むことができるようにするためです。
# Reads the value of a, before adding 3 to it in-placea += 3
|
これは、a = a + 1のような再代入文を使用せずに、変数を増加させる唯一の方法です。
しかし、ここでは、インタープリタが実行時にコードを最適化するので、全体として、このオプションはいずれにせよ重要ではありません。
まとめ
今回は、Pythonでインクリメント演算を使う方法と、なぜ++と--演算子がサポートされていないのかについて学びました。