みなさん、ご存知でしたでしょうか? pythonでは、インクリメント(デクリメント)演算子が無いという事実を…。
私は他の言語からプログラミングを学び始めていたのでf、あって当然と思っていた演算子が無い事に驚きました。今回はこのインクリメント(デクリメント)演算子についてご紹介させていただきます。
この記事では、
- インクリメント(デクリメント)演算子とは
- なぜ使えないのか
- 対応策
についてご理解いただけるかと思います。ぜひ、最後までお付き合いください。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
インクリメント(デクリメント)演算子とは?
インクリメント、デクリメント演算子とは、文字通り値を1つずつ増やす(減らす)ためのもので、for文やwhile文で値を一つずつずらし処理をしていく際によく使われている演算子です。他の言語では、以下のように使われています。
for(i=0; i<10; i++) { printf(i) #0~9までが表示されます。 }
このように、他言語の繰り返し処理では多出する演算子となります。
そもそも何故使えないの?
なぜpythonにインクリメント(デクリメント)演算子が使えないかと言うと、pythonを作った方がこの演算子を好ましくないと思った為だそうです。もちろん作者さんの個人的な好みの話ではありません。
pythonはそもそもとして、シンプルで誰が書いても同じように実装され、更に誰が見ても理解しやすい(メンテナンスしやすい)言語となる事を基本指針としています。
そのため、「”+”は和である」という以上の意味を持たせることは、pythonの設計方針にそぐわないと考えたのでしょう。pythonではインクリメント演算子を使用した難解な1行ではなく、誰でも一目で読める2,3行を書く事に重きを置いているのです。
対応策
pythonでインクリメント(デクリメント)演算子が使えない理由が分かったところで、どのように対応するかを紹介します。
累算代入をする
インクリメント演算子がない場合の簡単な対処法として、累算代入を行う方法があります。これは”+=”または”-=”という演算子を使う事で、任意の数でインクリメント、デクリメントを行う事ができる演算子になります。
実際の例をご確認ください。
result = 0 while(result < 3): print(result) result += 1
実行結果:
0 1 2
これは、”result = result + 1″と同じ意味を持っており、これを使う事でインクリメント、デクリメントをすることができます。
for文を回す際のインクリメントはrange()を使用する
他の言語では、for文を回す際に、”i++”を使用して繰り返す回数を決めるパターンが多くあったと思います。こういった場合、range()を使う事をおすすめします。実際の使い方は以下のようになります。
for i in range(0, 3): print(i)
実行結果:
0 1 2
range()は、開始の値と終わりの値の次の値、インクリメント、デクリメントをしたい値を指定(=ステップ幅を指定)して繰り返す働きがあります。
#開始の値0, 終わりの値2,1ずつインクリメントしたい場合 range(0, 3, 1) #開始の値3, 終わりの値0, 1ずつデクリメントしたい場合 range(3, -1, -1)
なお、3つ目の引数は入力しない事も可能で、デフォルト値は1になります。for文で繰り返したい回数を指定する場合は、このrange()を用いると分かりやすい実装ができます。
range()に関する詳細は以下を参考にしてください。
デクリメントはreversed()を使用する
renge()はデクリメントも可能ですが、実際に使おうとすると、少々難解なコードになってしまいます。そんなときは、reversed()を使うことができます。
もし[5, 4, 3, …, 0]と降順にしたい場合は、以下のように実装できます。
for i in reversed(range(0, 6)): print(i)
実行結果:
5 4 3 2 1 0
また、reversed()はリストを逆順に表示したい場合にも便利です。
mylist = [10, 20, 30, 40, 50] for num in reversed(mylist): print(num)
実行結果:
50 40 30 20 10
リストが逆順で表示されました。このように、reversed()を使う事でデクリメントを行うコードを見やすくする事ができます。
まとめ
いかがでしたでしょうか? 今回の記事では、
- インクリメント(デクリメント)演算子について
- インクリメント(デクリメント)が使えない理由
対処法として、
- 累算演算子を使う方法
- range()を使う方法
- reversed()を使う方法
について説明させていただきました。
pythonではインクリメント、デクリメント演算子は使えないようにできていますが、対処は簡単にできます。pythonの設計方針を理解した上で、分かりやすいコードが書けると良いですね!