【python】数値をインクリメントする

 他のプログラミング言語では多くの例でサポートされているインクリメント演算子(++)、またはデクリメント演算子(–)は、pythonではサポートされていません。

 例えば、JavaScriptでは以下のような書き方が可能ですが…。

let i = 0;
console.log(++i);  // -> 0
console.log(++i);  // -> 1
console.log(++i);  // -> 2

 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ではサポートされていないこともあり、少し工夫した書き方が必要になります。手段は色々ありますが、チーム開発の場合は読みやすさを意識しながらコードを書いていきたいですね。