ドキュメントによると、それらはほとんど交換可能です。どちらか一方を使用する文体上の理由はありますか?
19 に答える
補間に使用される文字列または自然言語メッセージである文字列を二重引用符で囲み、小さな記号のような文字列には一重引用符を使用するのが好きですが、文字列に引用符が含まれている場合、または忘れた場合は規則に違反します。docstringにはトリプル二重引用符を使用し、正規表現には生の文字列リテラルを使用します(不要な場合でも使用します)。
例えば:
LIGHT_MESSAGES = {
'English': "There are %(number_of_lights)s lights.",
'Pirate': "Arr! Thar be %(number_of_lights)s lights."
}
def lights_message(language, number_of_lights):
"""Return a language-appropriate string reporting the light count."""
return LIGHT_MESSAGES[language] % locals()
def is_pirate(message):
"""Return True if the given message sounds piratical."""
return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None
https://docs.python.org/2.0/ref/strings.htmlの公式ドキュメントを引用します。
平易な英語: 文字列リテラルは、対応する一重引用符 (') または二重引用符 (") で囲むことができます。
だから違いはありません。代わりに、コンテキストに一致するスタイルを選択し、一貫性を保つように指示されます。そして、私は同意します-この種のことについて「慣習」を考え出そうとすることは無意味であると付け加えます。なぜなら、あなたは初心者を混乱させるだけだからです.
私が見つけたように、私は'
特に のために、を好んでいました。また、私のスイスドイツ語キーボードでは、キーを使わずに入力できます。'''docstrings'''
"""this creates some fluff"""
'
Shift
それ以来、PEP 257"""docstrings"""
に準拠するために、 に三重引用符を使用するように変更しました。
私はウィルと一緒です:
- テキストの二重引用符
- 識別子のように動作するものに対する一重引用符
- 正規表現の二重引用符で囲まれた生の文字列リテラル
- docstringの二重引用符を3倍にする
それが多くの脱出を意味するとしても、私はそれに固執します。
引用符が付いているために目立つ一重引用符の識別子から最大の価値を得ることができます。残りのプラクティスは、これらの一重引用符で囲まれた識別子にある程度の余裕を与えるためだけのものです。
持っている文字列にいずれかが含まれている場合は、もう一方を使用する必要があります。たとえば、"You're able to do this"
、または'He said "Hi!"'
. それ以外は、できるだけ一貫性を保つ必要があります (モジュール内、パッケージ内、プロジェクト内、組織内)。
あなたのコードが C/C++ で作業する人 (またはこれらの言語と Python を切り替える場合) に読まれる場合、''
1 文字の文字列に使用し""
、より長い文字列に使用すると、移行が容易になる可能性があります。(互換性のない他の言語に従う場合も同様です)。
私が実際に見た Python コードは よりも好まれる傾向があり"
ます'
が、ほんのわずかです。1 つの例外は、私が見たもの"""these"""
よりもはるかに一般的です。'''these'''
トリプル引用符で囲まれたコメントは、この質問の興味深いサブトピックです。PEP 257 では、doc 文字列の三重引用符が指定されています。Google Code Search を使用して簡単なチェックを行ったところ、Python の 3 つの二重引用符は、 3 つの単一引用符の約 10 倍の頻度で使用されていることがわかりました。Google インデックスのコードでは 131K の出現に対して 1.3M です。したがって、複数行の場合、コードが三重の二重引用符を使用すると、コードはおそらく人々にとってよりなじみ深いものになるでしょう。
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
その単純な理由から、私は常に外側に二重引用符を使用しています。いつも
綿毛といえば、アポストロフィを表すためにエスケープ文字を使用する必要がある場合、文字列リテラルを ' で合理化することには何のメリットがありますか? コーダーが小説を読むのは気分を害しますか? 高校の英語の授業があなたにとってどれだけつらいものだったか想像もつきません!
Python では、次のような引用符を使用します。
mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'
print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6
次の出力が得られます。
this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'
私は一般的に二重引用符を使用しますが、特定の理由ではありません - おそらく Java の習慣から外れたのでしょう。
また、二重引用符が必要な場合よりも、インライン リテラル文字列にアポストロフィが必要な場合が多いと思います。
個人的には、どちらか一方に固執します。それは問題ではありません。そして、どちらの引用にも独自の意味を与えることは、コラボレーションするときに他の人を混乱させるだけです.
それはおそらく何よりも文体の好みです。PEP 8をチェックしたところ、一重引用符と二重引用符についての言及はありませんでした。
キーストロークが2つではなく1つしかないため、一重引用符が好きです。つまり、一重引用符を作成するためにShiftキーをマッシュする必要はありません。
Perl では、変数や \n、\t、\r などのエスケープ文字を挿入する必要のない文字列がある場合、単一引用符を使用します。
PHP は Perl と同じように区別します。単一引用符内のコンテンツは解釈されません (\n でさえも変換されません)。これは、値を出力する変数を含むことができる二重引用符とは対照的です。
残念ながら、Python にはありません。技術的に見ると、Python では名前/テキストを変数から分離するための $ トークン (など) はありません。結局、両方の機能によって Python が読みやすくなり、混乱が少なくなります。Python では、一重引用符と二重引用符を同じ意味で使用できます。
私はそのとき思いついたものを何でも使うだけです。2つを気まぐれに切り替えられるのが便利!
もちろん、引用文字を引用する場合、2 つの引用文字を切り替えるのはそれほど気まぐれではないかもしれません...
見やすいので、二重引用符を使用することにしました。
ピクセルと驚きの両方を最小限に抑えることを目指しています。私は通常'
、ピクセルを最小化することを好み"
ますが、代わりに、文字列にアポストロフィが含まれている場合は、再びピクセルを最小化します。ただし、docstring については、後者が非標準であり、珍しいため、驚くべきものであるため、後者"""
を好みます。上記のロジックで'''
使用した一連の文字列があり、さらに."
'
"
おそらく、ピクセル最小化の哲学を次のように考えると役立つでしょう。英語の文字がどちらのように見えるか、どちらが好きですA B C
かAA BB CC
? 後者を選択すると、空でないピクセルの 50% が無駄になります。
チームの好みまたはプロジェクトのコーディング ガイドライン。
多言語環境にいる場合、たとえば、他の言語が使用するのと同じタイプの引用符を文字列に使用することをお勧めします。そうでなければ、私は個人的に「の外観が一番好きです」
私の知る限りではありません。いくつかのコードを見ると、" " は一般的にテキストの文字列に使用され (' は " よりもテキスト内でより一般的だと思います)、' ' はハッシュキーなどに現れます。
私が二重引用符を使用する理由は、Bash を除くほとんどの言語 (C++、Java、VB など) で何年も二重引用符を使用してきたからです。どちらの文字にもシフト キーが必要です。
'
="
/
= \
=\\
例 :
f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")
結果は同じ
=>> いいえ、同じではありません。単一のバックスラッシュは文字をエスケープします。\k
andはor or or\w
のような有効なエスケープではないため、その例では運が良かっただけです。\t
\n
\\
\"
単一のバックスラッシュを使用する (そしてそのように解釈する) 場合は、「生の」文字列を使用する必要があります。これを行うr
には、文字列の前に ' ' を付けます。
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
Windows のパスに関する限り、スラッシュは同じように解釈されます。明らかに、文字列自体は異なります。ただし、外部デバイスでこのように処理されることは保証しません。