“ string”に違いはありますかとPythonの「文字列」? [複製]
-
02-07-2019 - |
質問
この質問にはすでに回答があります:
PHPでは、"二重引用符"で囲まれた文字列「単一引用符」で囲まれた文字列は置き換えられませんが、置換する変数について解析されます。 Pythonでは、これも適用されますか?
解決
いいえ:
2.4.1。文字列とバイトリテラル
...平易な英語:両方のタイプのリテラルは、一致する単一引用符(
'
)または二重引用符("
)で囲むことができます。また、3つの一重引用符または二重引用符の一致グループで囲むこともできます(これらは通常、三重引用符付き文字列と呼ばれます)。バックスラッシュ(\
)文字は、改行、バックスラッシュ自体、引用文字などの特別な意味を持つ文字をエスケープするために使用されます...
他のヒント
Pythonは、 'および"が存在する数少ない(?)言語の1つです。同じ機能があります。私の選択は通常、中身に依存します。単一引用符を含む文字列を引用する場合は、二重引用符を使用し、その逆を使用して、文字列内の文字をエスケープする必要を減らします。
例:
"this doesn't require escaping the single quote"
'she said "quoting is easy in python"'
これは、「文字列リテラル」に記載されています。 Pythonドキュメントのページ:
他の一部の言語では、一重引用符を使用するとメタ文字が解釈されません。 Rubyで次の例をご覧ください:
irb(main):001:0> puts "string1\nstring2"
string1
string2
=> nil
irb(main):002:0> puts 'string1\nstring2'
string1\nstring2
=> nil
Pythonでは、文字列を文字どおりに取得する場合は、生の文字列(「r」文字が前にある文字列)を使用できます。
>>> print 'string1\nstring2'
string1
string2
>>> print r'string1\nstring2'
string1\nstring2
Pythonでの単一引用符と二重引用符で囲まれた文字列は同一です。唯一の違いは、単一引用符で囲まれた文字列にエスケープされていない二重引用符が含まれる可能性があることです。例:
'a "quoted" word'
"another 'quoted' word"
次に、三重引用符で囲まれた文字列があり、引用文字と改行の両方をエスケープ解除できます。
名前付き指定子とlocals()ビルトインを使用して、文字列内の変数を置換できます:
name = 'John'
lastname = 'Smith'
print 'My name is %(name)s %(lastname)s' % locals() # prints 'My name is John Smith'
インタラクティブなPythonインタープリターは一重引用符を好みます:
>>> "text"
'text'
>>> 'text'
'text'
これは初心者にとって混乱を招く可能性があるため、単一引用符を使用します(異なるコーディング標準がない限り)。
"の違いおよび '文字列の引用はスタイルにすぎません-文字列コンテンツ内で他の文字列をエスケープする必要がなくなることを除いて。
スタイル
PEP8 は、一貫したルール PEP257 は、docstringsが三重の二重引用符を使用することを示唆しています。
Pythonでは、単一引用符で囲まれた文字列と二重引用符で囲まれた文字列は 同じ。このPEPはこれを推奨していません。ルールを選ぶ それにこだわる。文字列に一重引用符または二重引用符が含まれる場合 ただし、文字は、他の文字を使用して、 文字列。読みやすさが向上します。
三重引用符で囲まれた文字列の場合、常に二重引用符を使用して PEP 257のdocstring規則と一致します。
ただし、自然言語の文字列(補間を含む)には二重引用符を優先する慣習が広く使用されています。技術的な文字列の単一引用符:記号、文字、パス、コマンドラインオプション、技術的な正規表現、...
(たとえば、I18N用のコードを準備するとき、二重引用符で囲まれた文字列をすばやく変換する半自動REGEXを実行します(例: gettext
)
Pythonで文字列をqouteできる3つの方法があります。 " string" 「ひも」 """ ひも ひも """ それらはすべて同じ結果を生成します。
Pythonには違いはありません。XMLを生成する際に、Pythonを実際に活用できます。正しいXML構文では、属性値を二重引用符で囲む必要があり、Javaなどの多くの言語では、次のような文字列を作成する際にこれらをエスケープする必要があります。
String HtmlInJava = "<body bgcolor=\"Pink\">"
ただし、Pythonでは、単に他の引用符を使用し、次のように必ず一致する終了引用符を使用してください。
html_in_python = '<body bgcolor="Pink">'
かなりいいですね?また、3行の二重引用符を使用して、複数行の文字列を開始および終了できます。EOLは次のように含まれます。
multiline_python_string = """
This is a multi-line Python string which contains line breaks in the
resulting string variable, so this string has a '\n' after the word
'resulting' and the first word 'word'."""
はい。 Pythonで一重引用符と二重引用符が同一であると主張するのは単純に間違っています。
それ以外の場合、次のコードでは、二重引用符で囲まれた文字列は、Pythonが処理するのに4.5%余分にかかることはありません。
import time
time_single = 0
time_double = 0
for i in range(10000000):
# String Using Single Quotes
time1 = time.time()
str_single1 = 'Somewhere over the rainbow dreams come true'
str_single2 = str_single1
time2 = time.time()
time_elapsed = time2 - time1
time_single += time_elapsed
# String Using Double Quotes
time3 = time.time()
str_double1 = "Somewhere over the rainbow dreams come true"
str_double2 = str_double1
time4 = time.time()
time_elapsed = time4 - time3
time_double += time_elapsed
print 'Time using single quotes: ' + str(time_single)
print 'Time using double quotes: ' + str(time_double)
出力:
>python_quotes_test.py
Time using single quotes: 13.9079978466
Time using double quotes: 14.5360121727
したがって、自分のことを知っていると思われる、高速でクリーンで立派なコードが必要な場合、実用的な場合は常に文字列に一重引用符を使用します。また、Shiftキーをスキップすることで、エネルギー消費量が少なくなります。