Pythonにおけるシングルクォーテーションとダブルクォーテーション:シングルにすべし

投稿者: | 2019年4月3日

Pythonにおけるシングルクォーテーションとダブルクォーテーションの違い:結論

Pythonでクォーテーションマークをシングルクォーテーションにするかダブルクォーテーションにするかの差異が議論になっているようだ。

結論:シングルクォーテーションを採用

少なくとも私における結論はPythonではシングルクォーテーションを採用すべきだということになった、想定するのは他言語で利用するため、数字等の配列をStringにしてCSVなどに出力するケースである。

私だけではなく多くのPython+Mobile開発者がPythonでAI等の数値計算、それをSwift, Kotlin, Javaに読み込ませて使うという事を考えると思う。

色々実験した結果、以下の理由でシングルクォーテーションと言うことになった。

理由:ダブルクォーテーションのバグ?

その理由はPythonのバグと思われるダブルクォーテーションの奇妙な振る舞いにある。

つまり

“12.3”, “23.4”, “34.5”
“45.6”, “56.7”, “67.8”

のような文字列をコンソールに出力してそれをパイプでabc.csvのようなファイルにする。そしてそれを他言語の側で読み取って利用することを考える。

ここでダブルクォーテーションを利用しているが、それは他言語では大抵の場合、ダブルクォーテーションをStringのために用いるからである。

ところがこれを出力したいがために

sampleStringDouble = '\"'+'abc'+'\"'

とやってこれを何らかの方法でコンソール出力すると

"""abc"""

のようになんと三つもダブルクォーテーションが出てしまうのである。

もちろん通常はabcの部分は何らかのオブジェクトをString化するメソッドが入ることが多い。

これが私の環境だけだとしても、再現性のないエラーと言うことになって謎のバグを誘発しかねない。

まとめ:シングルクォーテーションならば意図通り

一方、

sampleStringSingle = '\''+'abc'+'\''

ならば

'abc'

のように意図通りの出力が得られるのである。

従って

‘12.3’, ‘23.4’, ‘34.5’
‘45.6’, ‘56.7’, ‘67.8’

のようにシングルクォーテーションで出力してそれをsed, awkでダブルクォーテーションに変換するのが間違いのないルーティンとなるだろう。

コメントを残す