回答:
補間に使用される文字列または自然言語メッセージである文字列を二重引用符で囲み、小さな記号のような文字列を単一引用符で囲みますが、文字列に引用符が含まれている場合、または忘れた場合は規則に違反します。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
その後"""docstrings"""
、PEP 257に準拠するために、に三重引用符を使用するように変更しました。
"
PC QWERTYキーボードでのみShiftキーが必要です。私のキーボードで"
は、実際に入力する方が簡単です。
あなたが持っている文字列に一方が含まれている場合は、もう一方を使用する必要があります。たとえば、、"You're able to do this"
または'He said "Hi!"'
。それ以外は、できる限り一貫している必要があります(モジュール内、パッケージ内、プロジェクト内、組織内)。
C / C ++を使用する人がコードを読み取る場合(または、それらの言語とPythonを切り替える場合)、''
単一文字の文字列に使用し、""
長い文字列に使用すると、移行が容易になります。(同様に、互換性がない他の言語についても同様です)。
私が実際に目にしたPythonコードはに"
勝る傾向があり'
ますが、ほんの少しです。唯一の例外は、私が見たものから、"""these"""
より一般的です'''these'''
。
三重引用符で囲まれたコメントは、この質問の興味深いサブトピックです。PEP 257は、ドキュメント文字列の三重引用符を指定しています。私はGoogleコード検索を使用して簡単なチェックを行ったところ、Pythonの三重二重引用符は、三重単一引用符の約10倍の人気があることがわかりました。そのため、複数行の場合、コードがトリプルダブルクォートを使用する場合、コードはおそらくより親しみやすくなります。
"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'
"""This is a string with "quotes""""
、SyntaxErrorが発生します。この状況をどのように解決できますか?(と同じ'''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
。
それはおそらく何よりもスタイルの好みです。私はPEP 8をチェックしたところ、一重引用符と二重引用符についての言及がありませんでした。
単一引用符の方が2つではなく1つのキーストロークなので、私はそれを優先します。つまり、単一引用符を付けるためにShiftキーをマッシュする必要はありません。
Perlでは、変数または\ n、\ t、\ rなどのエスケープ文字を補間する必要のない文字列がある場合は、単一引用符を使用します。
PHPはPerlと同じ区別をします。値を出力するために変数を含めることができる二重引用符とは対照的に、単一引用符のコンテンツは解釈されません(\ nも変換されません)。
Pythonはそうではありません、私は恐れています。技術的には、Pythonで名前/テキストを変数から分離するための$トークン(など)はありません。結局のところ、どちらの機能もPythonを読みやすくし、混乱を少なくします。Pythonでは、一重引用符と二重引用符を同じ意味で使用できます。
r
文字列リテラルの前に追加して、そこから生の文字列を作成する場合を除きます。したがってprint 'a\nb'
、2行印刷されますが、1行print r'a\nb'
印刷されます。
当時は自分の好きなものを何でも使っています。ふたりで気まぐれに切り替えられると便利!
もちろん、引用文字を引用するとき、2つを切り替えるのは結局それほど風変わりではないかもしれません...
チームの好みまたはプロジェクトのコーディングガイドライン。
多言語環境にいる場合は、たとえば、他の言語が使用するのと同じタイプの引用符を文字列に使用することをお勧めします。さもなければ、私は個人的に一番の見た目が好きです
ピクセルと驚きの両方を最小限に抑えることを目指しています。私は通常'
、ピクセルを最小化するために好み"
ますが、代わりに文字列にアポストロフィがある場合は、ピクセルを最小化します。ただし、docstringの場合、後者は非標準であり、一般的ではないため、意外なので、優先さ"""
れ'''
ます。"
上記のロジックに従って使用した一連の文字列があり、さらにで回避できる文字列がある'
場合でも、"
、驚きを最小限に抑えるために、一貫性を維持にその。
おそらくそれは、次のようにピクセル最小化の哲学を考えるのに役立ちます。英語の文字が似ていると思いますA B C
かAA BB CC
?後者を選択すると、空でないピクセルの50%が無駄になります。
'
= "
/
= \
=\\
例:
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の\w
ような有効なエスケープではないため、この例ではたまたま幸運なことに\t
\n
\\
または\"
単一のバックスラッシュを使用したい(そしてそれらをそのように解釈させたい)場合は、「生の」文字列を使用する必要があります。r
文字列の前に' 'を置くことでこれを行うことができます
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
Windowsのパスに関する限り、スラッシュは同じように解釈されます。明らかに、文字列自体は異なります。ただし、外部デバイスでこのように処理されることは保証できません。
os.path.join()