87
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonのシングルクォーテーションとダブルクォーテーションの使い分けってどうするの問題

Last updated at Posted at 2019-10-10

#はじめに
Pythonを書いているとシングルクォーテーション'とダブルクォーテーション"どっちでも同じなのでは?と思い色々調べました。
各企業、個人ごとにベストプラクティスがあると思いますがとりあえず個人的な意見と自分なりに調べた見解を書きます。

個人的な見解

その1. シングルクォーテーションの方が打つのが楽

自分はUSキーボードを使用しているのでシングルクォーテーションを打つとき1キーを押すだけで済むで楽なので個人的にはシングルクォーテーション推し。
むしろこれができるからUSキーボードにしてるまであります

JISキーボードでコードを書いていたこともありましたがもう戻れないと思います。JISキーボードで開発をしている方がいたらどのようにシングルクォーテーションまたはダブルクォーテーションを打っているのか教えて欲しいです。ショートカットとか作成してるんですかね?
海外はJISキーボードをおそらく使ってないと思うので、この議題は日本だけかも知れません。

スクリーンショット 2019-10-09 16.47.47.png ここから先はキーボードの話になりそうなのでここで止めておきます。 ## その2. 文字列にシングルクォーテーションが含まれている場合はダブルクォーテーションを使う
text_single = 'This pen is Tom\'s'
text_double = "This pen is Tom's"

あんまり文字列にシングルクォーテーションを入れることは多くはないですが、このときだけは仕方がないと思いつつダブルクォーテーションで囲っています。もちろん逆も然りです。

シングルとダブル両方文字列に入れないといけない状況があるならば自分はシングルクォーテーションで囲うでしょう。

その3. docstringは三連ダブルクォーテーションを使う

これは自分はVSCodeで普段Pythonを書いているのでその拡張機能autoDocstringを使用しています。

ダブルクォーテーションを三つ続けてダブルクォーテーションを押してからエンターキーを押さないとdocstringを生成してくれないのでdocstringではダブルクォーテーションを使用しています。

ezgif-3-607ee20e743d.gif

PEP 257ではdocstringはダブルクォーテーションで書こうと記述があります。

For consistency, always use """triple double quotes""" around docstrings. Use r"""raw triple double quotes""" if you use any backslashes in your docstrings. For Unicode docstrings, use u"""Unicode triple-quoted strings""".

There are two forms of docstrings: one-liners and multi-line docstrings.

#GitHubで調べてみた
やはり一個人よりもGitHubのコントリビュータの方達がどう使い分けているかをみた方がいいと思ったのでいくつかプロジェクトを見てみました。
以下のプロジェクトのコードを読みました。選定理由は特にないです。

わかったこと

GitHubのプロジェクトのコードを見て大まかに感じ取れたこととしては以下の2つ。

シングルクォーテーションとダブルクォーテーションがたまに混ぜっていたものもありました。
(作為的なものかも知れない)

  • やはりdocstringはダブルクォーテーション
  • raiseの文章ではダブルクォーテーションを使っていることが多い
  • エスケープ文字はなるべく使用せずにシングルクォーテーションとダブルクォーテーションを使い分けている

raiseの文章ではダブルクォーテーションを使っているのはシングルクォーテーションを文章内に使いたい場合があるからですかね? あまり日本語の文章でシングルクォーテーションを使用しないので新鮮でした。

#Googleの公開されているリポジトリを見てみる
Google Python Style Guideを公開しているくらいですから、きっとシングルクォーテーションとダブルクォーテーションの使い分けもしているはずと思いこちらもいくつか調べました。

docstringについてはPEP 257に準拠するようです。

3.8.1 Docstrings
Python uses docstrings to document code. A docstring is a string that is the first statement in a package, module, class or function. These strings can be extracted automatically through the doc member of the object and are used by pydoc. (Try running pydoc on your module to see how it looks.) Always use the three double-quote """ format for docstrings (per PEP 257). A docstring should be organized as a summary line (one physical line) terminated by a period, question mark, or exclamation point, followed by a blank line, followed by the rest of the docstring starting at the same cursor position as the first quote of the first line. There are more formatting guidelines for docstrings below.

わかったこと

内容は前記したプロジェクトと同じですが徹底度合いが違いました。
驚くほどダブルクォーテーションをdocstringやメッセージに使用していました。どうしてもダブルクォーテーションを出力したい場合のみシングルクォーテーションを使用していました。

前記したcpythonmypyよりもシングルクォーテーションとダブルクォーテーションの使い分けがはっきりしているなという印象を持ちました。さすがGoogle!

まとめ

やはりstack orverflowなどでも議論されていますが個人的にグッと来たのは

So there is no difference. Instead, people will tell you to choose whichever style that matches the context, and to be consistent. And I would agree - adding that it is pointless to try to come up with "conventions" for this sort of thing because you'll only end up confusing any newcomers.

違いはありません。 代わりに、人々は、コンテキストに一致するスタイルを選択し、一貫性を保つように指示します。 そして、私は同意します-この種のことについて「慣習」を考え出そうとするのは無意味であると付け加えます。なぜなら、あなたは新参者を混乱させるだけだからです。

今までの内容が愚問になってしまいましたが、一貫性を保つこの一言に尽きると感じました。

みんなもシングルクォーテーションとダブルクォーテーションどっちとか迷う時間があったら、その時間をコードを書く時間に回しましょう。
私はこれを調べておそらく3時間くらいは取られました(この記事を書く時間を含め)

english_completely.gif

進捗がなかったらメンターが現れるATOM より

87
34
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?