単一引用符と二重引用符[閉じた]


79

Javaのバックグラウンドから来てPythonを書く仕事を始めたばかりで、他の開発者''は二重引用符()ではなく一重引用符("")を使用して文字列を引用する傾向があることに気付きました。例えば:

line1 = 'This is how strings typically look.'
line2 = "Not like this."

これには、個人的な好み以外に特別な理由がありますか?これは文字列を引用する適切な方法ですか?特に、私が知りたいのは、このスタイルのコーディングを推進する何らかの標準または受け入れられたベストプラクティスがあるかどうかです。


5
にアクセスしたことがある場合Ruby、実際に一重引用符と二重引用符の間に技術的な違いがあります。二重引用符は文字列補間をサポートします-単一引用符はリテラルとして解析されます。
-KChaloux

5
Perlおよびほとんどのシェルについても同じことが言えます。
Blrfl

18
どのようにこの質問は絶対的なPythonの初心者として、私はこれを知っておく必要がありますが、bashスクリプトを記述する場合は、大きな違いがある"」建設的ではありません。?。
Magicsowon

19
建設的ではない?もう。「python一重引用符」の最初のGoogle結果は、すぐに知る必要があることを示しています。エリックを尋ねるとdetly答えてくれてありがとう
aggieNick02

回答:


65

他の答えは技術的な違いはないという点で正しいですが、いくつかのオープンソースプロジェクトで非公式のスタイルルールを見てきました:二重引用符は、最終的にユーザーに表示される可能性のある文字列に使用されます(必要かどうか翻訳)、および単一引用符は、コード自体の機能に関連する文字列用です(たとえば、dictキー、正規表現、SQL)。

これは確かに普遍的なルール(またはPEPで体系化されたもの)ではないため、コーディングの他の任意の側面と同様に、ローカルルールになります。

PEP 8(この回答を書いたときには気づかなかった)が言うことに注意してください:

このPEPはこれを推奨していません。ルールを選択し、それに固執します。ただし、文字列に一重引用符または二重引用符が含まれる場合は、文字列のバックスラッシュを避けるためにもう一方を使用してください。読みやすさが向上します。

コメント者が指摘しているように、これは必ずしも「ルール」の解釈方法に応じて、矛盾しているとは限りません。私が提案することは、引用の後半では実際には機能しません。


1
これはハウススタイルかもしれませんが、PEP 8に反しています。1つを選択し、コンテンツに関係なくファイル全体に使用します。
ニルスフォンバース

4
@NilsvonBarth PEPは、「ルールを選択してそれに固執する」のではなく、「区切り文字を1つ選択してそれに固執する」のではありません。「ユーザーに表示されるテキストの二重引用符、マシンで使用されるものの単一引用符」は、固守すべき完全に細かいルールのようです。
タナースウェット

1
@Tanner Swett申し訳ありませんが、その通りです。「ファイル内」を指定するのはGoogle Pythonスタイルガイドですgoogle.github.io/styleguide/pyguide.html#310-strings
Nils von Barth

Blackは実際にPython文字列を二重引用符で囲まれるようにフォーマットします。jslintでさえ、JavaSciprt文字列を二重引用符で囲む必要があります。ほとんどの古い言語はオプションを提供することさえありませんでした。できるからといって、そうすべきだというわけではありません。もちろん、文字列に引用符がある場合のように、これが非常に便利な場合がいくつかあります。ただし、実際には、ほとんどの文字列は、コードベースでハードコーディングされていないデータセットから取得する必要があります。
ボボール

1
@bobort翻訳システムまたはUIシステムで文字列を検索している場合でも、コード内の文字列キーには依然として多くの場合、文字列キーが必要です。しかし、私は物事が進んでいることに同意し、この区別には実際には何の利点もありません。
間違いなく

21

それは非常に簡単です:

  • 単一引用符を使用すると、二重引用符をエスケープせずに埋め込むことができます。
  • 二重引用符を使用すると、エスケープされていない単一引用符を埋め込むことができます。

'二重引用符が必要になるまで(単一引用符)を使用するのが最もPythonic です。

次の引用は、文字列リテラルに関するドキュメントから直接引用したものです。

Unicode文字列で利用できます。Python 2では、「b」または「B」のプレフィックスは無視されます。Python 3でリテラルがバイトリテラルになる必要があることを示します(たとえば、コードが2to3で自動的に変換される場合)。「u」または「b」プレフィックスの後に「r」プレフィックスが続く場合があります。

三重引用符で囲まれた文字列では、エスケープされていない改行と引用符が許可されます(そして保持されます)。(「引用符」は、文字列を開くために使用される文字、つまり 'または "です。)


15
もちろん問題は-他のほとんどすべての言語が二重引用符を使用しているときに、なぜ単一引用符を好むのはPythonicなのですか?
マーティンベケット

13
@MartinBeckett 理由

3
ああもちろん;-)
マーティンベケット

6
@JarrodRoberson:「because」(または「because」)は、それが何らかのPEP(または同様の)でPythonicな方法で書かれている場合、有効な答えだと思います。それ以外の場合は、個人的な選択です。
ヨアヒムザウアー

5
一重引用符は見た目がきれいで、シフトキーを入力する必要もありません
-JoelFan

17

技術的な観点からは違いはありませんが、スタイルの観点からはいくつかの考えがあります。

  • 他のほとんどのプログラミング言語は二重引用符を使用します。
  • 英語で書く場合、通常は二重引用符が使用されます。
  • 単一引用符は、二重引用符をより自然な方法で使用できるため、アプリケーション内に非技術的/物語的なテキストがたくさんある場合に役立ちます。 bar = '"It\'s awesome" he said.'
  • 反対側では、英語ではいくつかの場面で一重引用符も使用されます。 bar = "\"It's awesome\" he said."

"は技術的な文字列でもよく使用されます-e、g f'you submit" {dumb_thing}ですが、それは私たちにとっても愚かなことです!」
クリスチャンザウアー

4

Pythonでの単一引用符と二重引用符の使用に違いはありません。実際には、使用しているデータの種類に応じて、いずれかのスタイルがより便利であることがわかります。

「デフォルトで」使用される引用符のタイプ(どちらか一方を使用する説得力のある理由がない場合)は、個人的な好みの問題です。

詳細については、Pythonドキュメントの文字列リテラルのセクションを参照してください。


4

単一引用符または二重引用符を定期的に使用するかどうかの習慣を開発する際に考慮すべきいくつかの事項。

二重引用符には2本の指のキーイングが必要です。したがって、タイピングエラーと速度低下の可能性が高くなります。

エディターは、あるキャラクターを別のキャラクターよりもよく表示することがあります。視覚的な構文のデバッグを容易にします。

Docstringsはトリプル文字を使用します:どちらが良く見える?"""""" または ''''''

Windows OSでこれを見たことはありませんが、一部の構文またはドキュメントツールでは、二重引用符と単一引用符が必要です。

私が見たほとんどのPythonチュートリアルでは、あなたの経験の反対を見る。通常、二重引用符が使用されています。


4

私の意見では、文字列には二重引用符を使用することを好みます。

どうして?他の言語の プログラマーの場合、迅速に適応し、コードをより簡単に理解できます。

Cプログラマーが見た場合:

'Writing "It\'s big?" No.'

次の代わりにためらいます:

"Writing \"It's big?\" No."

3
「書き込み」「それは大きいですか?」「いいえ」
API獣

@Lucioそれは私がやってきたことです。私は、ある種の確立されたPython標準に違反しているかどうかを知りませんでした。
エリックヒドリック

@EricHydrickいいえ、どちらかを選択できます。
ルシオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.