一重引用符とPython の二重引用符 [非公開]
-
09-06-2019 - |
質問
ドキュメントによると、これらはほとんど互換性があります。一方を他方よりも使用するスタイル上の理由はありますか?
解決
私は補間に使用される文字列や自然言語メッセージの文字列を二重引用符で囲み、小さな記号のような文字列を一重引用符で囲むことを好みますが、文字列に引用符が含まれている場合、または忘れた場合はルールに違反します。私は、たとえ不要であっても、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"""
. 。また、 '
なしで入力できます シフト 私のスイスドイツ語キーボードのキー。
それ以来、三重引用符を使用するように変更しました """docstrings"""
, に準拠する PEP257.
私はウィルと一緒です:
- テキストの二重引用符
- 識別子のように動作するものはすべて一重引用符で囲みます。
- 正規表現の二重引用符で囲まれた生の文字列リテラル
- docstring の三重二重引用符
たとえそれが多くの逃避を意味するとしても、私はそれに固執します。
引用符によって目立つ一重引用符で囲まれた識別子から最大の価値が得られます。残りのプラクティスは、単一引用符で囲まれた識別子に余地を与えるためだけにあります。
持っている文字列に一方が含まれている場合は、もう一方を使用する必要があります。例えば、 "You're able to do this"
, 、 または 'He said "Hi!"'
. 。それ以外は、できるだけ一貫性を保つ必要があります (モジュール内、パッケージ内、プロジェクト内、組織内)。
あなたのコードが C/C++ を使用する人によって読まれる場合 (または、これらの言語と Python の間で切り替える場合)、次を使用します。 ''
単一文字列の場合、および ""
文字列が長い場合は、移行が容易になる可能性があります。(互換性のない他の言語をフォローする場合も同様です)。
私が実際に見た Python コードは、 "
以上 '
, 、ほんのわずかですが。唯一の例外は、 """these"""
よりもはるかに一般的です '''these'''
, 、私が見た限りでは。
三重引用符で囲まれたコメントは、この質問の興味深いサブトピックです。 PEP 257 はドキュメント文字列に三重引用符を指定します. 。Google コード検索を使用して簡単にチェックしたところ、次のことがわかりました。 Python の三重二重引用符 ~の約10倍の人気がある 三重一重引用符 -- Google がインデックスするコードの出現数は 131,000 件に対し 131,000 件です。したがって、複数行のコードでは、三重二重引用符を使用した方がおそらく人々に馴染みやすいでしょう。
"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 では、変数を補間する必要のない文字列や 、 、 などのエスケープ文字がある場合に一重引用符を使用します。
PHP は Perl と同じ区別をします。値を出力する変数を含めることができる二重引用符とは対照的に、一重引用符で囲まれた内容は解釈されません ( さえも変換されません)。
残念ながら、Python にはありません。技術的に見て、Python には名前/テキストを変数から分離するための $ トークン (またはそれに類するもの) はありません。結局のところ、どちらの機能も Python を読みやすくし、混乱を軽減します。Python では、一重引用符と二重引用符を同じ意味で使用できます。
二重引用符を使用することにしたのは、見やすくするためです。
その時に気に入ったものは何でも使います。気まぐれに切り替えられるのは便利ですね!
もちろん、引用文字を引用するときに、この 2 つを切り替えるのはそれほど気まぐれではないかもしれません...
チームの好みやプロジェクトのコーディング ガイドライン。
多言語環境にいる場合は、たとえば、他の言語で使用されている文字列と同じ種類の引用符の使用を奨励したい場合があります。それ以外の場合、個人的には「」の見た目が一番好きです
私の知る限りではありません。ただし、いくつかのコードを見ると、「 」はテキストの文字列によく使用され(テキスト内では「 」よりも ' の方が一般的だと思います)、ハッシュキーなどに ' ' が表示されます。
ピクセルと驚きの両方を最小限に抑えることを目指しています。通常は好みです '
ピクセルを最小限に抑えるためですが、 "
代わりに、文字列にアポストロフィが含まれている場合は、やはりピクセルを最小化します。ただし、docstringの場合は、 """
以上 '''
なぜなら、後者は非標準的であり、一般的ではないため、驚くべきものだからです。今、私が使用した文字列がたくさんある場合 "
上記のロジックに従っていますが、次の方法で回避できるロジックもあります。 '
, 、まだ使えるかもしれません "
一貫性を保つためであり、驚きを最小限に抑えるためだけに含まれています。
おそらく、ピクセル最小化の哲学を次のように考えると役立つでしょう。英語の文字が次のようになったほうがいいと思いますか? A B C
または AA BB CC
?後者の選択では、空ではないピクセルの 50% が無駄になります。
私が二重引用符を使用しているのは、Bash を除くほとんどの言語 (C++、Java、VB など) で何年も二重引用符を使用していること、通常のテキストでも二重引用符を使用していること、および (修正された) 非英語キーボードを使用しているためです。どちらの文字も Shift キーが必要です。
'
= "
/
= \
= \\
例 :
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
そして \w
のようなエスケープは有効ではありません \t
または \n
または \\
または \"
単一のバックスラッシュを使用する (およびバックスラッシュをそのように解釈させる) 場合は、「生の」文字列を使用する必要があります。これを行うには、「」を入力します。r
' 文字列の前に
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
Windows のパスに関する限り、スラッシュは同じように解釈されます。ただし、文字列自体は明らかに異なります。ただし、外部デバイスでこのように処理されるかどうかは保証できません。