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でダブルクォーテーションに変換するのが間違いのないルーティンとなるだろう。