В PHP строка, заключенная в «двойные кавычки», будет анализироваться для замены переменных, тогда как строка, заключенная в «одинарные кавычки», не будет. В Python это также применимо?
Есть ли разница между строкой и «строкой» в Python?
Ответы (9)
Нет:
2.4.1. Строковые и байтовые литералы
... На простом английском языке: оба типа литералов могут быть заключены в соответствующие одинарные кавычки (
'
) или двойные кавычки ("
). Они также могут быть заключены в соответствующие группы из трех одинарных или двойных кавычек (обычно их называют строками в тройных кавычках). Символ обратной косой черты (\
) используется для экранирования символов, которые в противном случае имели бы особое значение, таких как перевод строки, сама обратная косая черта или символ кавычек...
Python — один из немногих (?) языков, где ' и " имеют одинаковую функциональность. Выбор для меня обычно зависит от того, что находится внутри. Если я собираюсь заключить в кавычки строку, в которой есть одинарные кавычки, я буду использовать двойные кавычки. и наоборот, чтобы сократить необходимость экранирования символов в строке.
Примеры:
"this doesn't require escaping the single quote"
'she said "quoting is easy in python"'
Это задокументировано на странице «Строковые литералы» документации по python:
- http://docs.python.org/2/reference/lexical_analysis.html#string-literals (2.x)
- http://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals (3.x)
В некоторых других языках метасимволы не интерпретируются, если вы используете одинарные кавычки. Возьмите этот пример в 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 предполагает, что строки документации используют тройные двойные кавычки.
В Python строки в одинарных и двойных кавычках — это одно и то же. Этот PEP не дает рекомендаций по этому поводу. Выберите правило и придерживайтесь его. Однако, если строка содержит символы одинарной или двойной кавычки, используйте другую, чтобы избежать обратной косой черты в строке. Это улучшает читаемость.
Для строк в тройных кавычках всегда используйте символы двойных кавычек, чтобы соответствовать соглашению о строках документации в PEP 257.
Однако широко используется практика предпочитать двойные кавычки для строк на естественном языке (включая интерполяцию) - таким образом, все, что потенциально является кандидатом на I18N. И одинарные кавычки для технических строк: символы, символы, пути, параметры командной строки, технические REGEX, ...
(Например, при подготовке кода для I18N я запускаю полуавтоматический REGEX, быстро преобразующий строки с двойными кавычками для использования, например, gettext
)
Есть 3 способа, которыми вы можете цитировать строки в python: "string" 'string' """ string string """ все они дают одинаковый результат.
В Python нет никакой разницы, и вы действительно можете использовать его в своих интересах при создании XML. Правильный синтаксис XML требует двойных кавычек вокруг значений атрибутов, и во многих языках, таких как Java, это заставляет вас экранировать их при создании такой строки:
String HtmlInJava = "<body bgcolor=\"Pink\">"
Но в Python вы просто используете другую кавычку и обязательно используете соответствующую конечную кавычку, например:
html_in_python = '<body bgcolor="Pink">'
Довольно мило, да? Вы также можете использовать три двойные кавычки для начала и конца многострочных строк, включая 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, просто ошибаются.
В противном случае в следующем коде строка в двойных кавычках не потребовала бы дополнительных 4,5% времени для обработки Python:
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.