他のプログラミング言語では多くの例でサポートされているインクリメント演算子(++)、またはデクリメント演算子(–)は、pythonではサポートされていません。
例えば、JavaScriptでは以下のような書き方が可能ですが…。
let i = 0;
console.log(++i); // -> 1
console.log(++i); // -> 2
console.log(++i); // -> 3
pythonでは誤った結果が返ってきます。
i = 0
print(++i) # -> 0
また、後置インクリメントに関してはsyntax errorとなります。
i = 0
print(i++) # -> SyntaxError: invalid syntax
累算代入演算子(+=, -=など)を使用する
pythonでは、累算代入演算子がサポートされています。これは他の多くのプログラミング言語でもサポートされており、違和感なく使えるはずです。
i = 0
i += 1
print(i) # -> 1
i += 1
print(i) # -> 2
i += 1
print(i) # -> 3
ちなみに、累算代入演算子は、+や-以外にも、*や/、**などにも使えます。
i = 0
i += 2 # 足し算
print(i) # -> 2
i *= 2 # 掛け算
print(i) # -> 4
i **= 2 # 累乗
print(i) # -> 16
i /= 2 # 割り算
print(i) # -> 8
i -= 2 # 引き算
print(i) # -> 6
代入式(:=)を使う(python3.8以降)
上述したサンプルコードのとおり、累算代入演算子は、計算を行う行と、実際にprintする行の2行が必要になってしまいます。
しかし、この苦悩を解決してくれる、代入式という構文がpython3.8で新たにサポートされました。
これを応用し、一行でインクリメントと表示を行ってみましょう。
i = 0
print((i:=i+1)) # -> 1
print((i:=i+1)) # -> 2
print((i:=i+1)) # -> 3
一行でインクリメントを書くことができました。
ただ、読みやすいかどうかは別です。使う際は、その場にあった書き方かどうかを意識して使うようにしましょう。
まとめ
他の言語では当然のようにサポートされていたりするインクリメント演算子ですが、pythonではサポートされていないこともあり、少し工夫した書き方が必要になります。手段は色々ありますが、チーム開発の場合は読みやすさを意識しながらコードを書いていきたいですね。