Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

インクリメント、デクリメント演算子のないPythonの話。

※この記事はQiitaに2017年01月12日に投稿したものと同一です。

qiita.com

CとかJavaのコードと並行する形でPythonを書いているとインクリメントやデクリメントにi++やi--のように演算子を書きたくなってしまうことがついつい…。

しかし、やってみればわかることですがこれだとエラーが出てしまいます。

>>> i=1 
>>> i++
SyntaxError: invalid syntax

"++"や"--"のような演算子Pythonには実装されていない理由に関しては諸説あるようですが、Pythonの生みの親であり慈悲深き終身独裁者である元GoogleエンジニアのGuido van Rossum氏がPythonは"+"や"-"に複雑な意味を与えずに書き手にも読み手にも理解しやすいものにしたかったというのがあるそうです。

ちなみにですが、RubyScalaといった言語にもこれらの演算子はないです。こちらも"ない"理由は様々なようですが…。

なにはともあれ前置と後置がきっかけで生まれるエラーを心配せずに済むので個人的にはありがたい仕様だと思っています。

Pythonでは次のように書けば問題ありません。

>>> i+=1 # インクリメント 
>>> print(i) 
2 
>>> i-=1 # デクリメント 
>>> print(i) 
1 

またよく使うfor文に関しては

>>> for(int i=0; i<10; i++)

ではなく

>>> for i in range(0, 10)

と書けばいいわけです。

ちなみに普段見かけることはありませんが補数を利用すれば次のように書くこともできます。書こうと思えば…ですが。

>>> i=-~1
>>> print(i)
2

おまけとして、文字のインクリメント(?)は次のように書けます。

>>> print(chr(ord('a')+1))
b

 参考