Одиночные кавычки и двойные кавычки в Python

Согласно документации, они в значительной степени взаимозаменяемы. Есть ли стилистическая причина использовать один над другим?

Ответ 1

Мне нравится использовать двойные кавычки вокруг строк, которые используются для интерполяции или которые являются сообщениями на естественном языке, и одинарные кавычки для небольших символьных строк, но нарушают правила, если строки содержат кавычки или если я забыл. Я использую тройные двойные кавычки для docstrings и raw string литералы для регулярных выражений, даже если они не нужны.

Например:

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

Ответ 2

Цитирование официальных документов на https://docs.python.org/2.0/ref/strings.html:

В простом английском: строковые литералы могут быть заключены в соответствующие одиночные кавычки (') или двойные кавычки (").

Так что нет никакой разницы. Вместо этого люди расскажут вам, какой стиль будет соответствовать контексту, и быть последовательным. И я бы согласился - добавив, что бессмысленно пытаться придумать "соглашения" для такого рода вещей, потому что вы только в конечном итоге запутаете любых новичков.

Ответ 3

Я предпочитал ', особенно для '''docstrings''', поскольку я нахожу """this creates some fluff""". Кроме того, ' можно ввести без клавиши Shift на моей швейцарской немецкой клавиатуре.

С тех пор я сменил использование трёхкратных кавычек для """docstrings""", чтобы соответствовать PEP 257.

Ответ 4

Я с Волей:

  • Двойные кавычки для текста
  • Одиночные кавычки для всего, что ведет себя как идентификатор
  • Двойные цитированные исходные строковые литералы для регулярных выражений
  • Тройные двойные кавычки для docstrings

Я буду придерживаться этого, даже если это означает много побегов.

Я получаю наибольшее значение из одиночных кавычек, выделяющихся из-за кавычек. Остальная часть практики заключается только в том, чтобы дать этим одиночным кавычкам идентификатор какой-то стоячей комнате.

Ответ 5

Если строка содержит один, то вы должны использовать другую. Например, "You're able to do this" или 'He said "Hi!"'. Помимо этого, вы должны просто быть настолько последовательными, насколько можете (внутри модуля, внутри пакета, внутри проекта, внутри организации).

Если ваш код будет прочитан людьми, которые работают с C/С++ (или если вы переключаетесь между этими языками и Python), используйте '' для односимвольных строк и "" для более длинных строк облегчить переход. (Аналогично для других языков, где они не являются взаимозаменяемыми).

Код Python, который я видел в дикой природе, как правило, предпочитает " более ', но только немного. Единственное исключение состоит в том, что """these""" гораздо чаще, чем '''these''', из того, что я видел.

Ответ 6

Тройные цитируемые комментарии - интересная подтема этого вопроса. PEP 257 указывает тройные кавычки для строк doc. Я сделал быструю проверку с помощью Google Code Search и обнаружил, что тройные двойные кавычки в Python примерно в 10 раз популярнее тройные одинарные кавычки - 1.3M против 131K вхождения в индексы Google. Поэтому в случае с несколькими линиями ваш код, вероятно, будет более знаком людям, если он использует тройные двойные кавычки.

Ответ 7

"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

По этой простой причине я всегда использую двойные кавычки снаружи. Всегда

Говоря о пухах, что хорошего в том, чтобы упорядочить ваши строковые литералы с помощью "если вам придется использовать escape-символы для представления апострофов? Оскорбит ли кодировщиков читать романы? Я не могу себе представить, насколько болезненным для вас был английский класс английского языка?

Ответ 8

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'

Ответ 9

Я использую двойные кавычки вообще, но не по какой-либо конкретной причине - возможно, просто по привычке из Java.

Я думаю, вы также скорее захотите апострофы во встроенной литеральной строке, чем вам нужны двойные кавычки.

Ответ 10

Лично я придерживаюсь того или другого. Это не имеет значения. И предоставление вашего собственного смысла цитатам - это просто запутать других людей, когда вы сотрудничаете.

Ответ 11

Это, вероятно, стилистическое предпочтение больше всего. Я только что проверил PEP 8 и не видел упоминания одинарных и двойных кавычек.

Я предпочитаю одиночные кавычки, потому что его единственное нажатие клавиши вместо двух. То есть, мне не нужно сбрасывать клавишу shift, чтобы сделать одиночную кавычку.

Ответ 12

В Perl вы хотите использовать одинарные кавычки, когда у вас есть строка, которая не нуждается в интерполяции переменных или экранированных символов, таких как \n,\t,\r и т.д.

PHP делает то же самое отличие, что и Perl: контент в одинарных кавычках не будет интерпретироваться (даже не будет преобразован \n), в отличие от двойных кавычек, которые могут содержать переменные, чтобы распечатать их значение.

Питон не боится. С технической точки зрения не существует $token (или тому подобного), чтобы отделить имя/текст от переменной в Python. Обе функции делают Python более читабельным, менее запутанным. Одинарные и двойные кавычки могут использоваться взаимозаменяемо в Python.

Ответ 13

Я решил использовать двойные кавычки, потому что их легче увидеть.

Ответ 14

Я просто использую то, что поражает мое воображение в то время; это удобно, чтобы иметь возможность переключаться между ними по прихоти!

Конечно, при цитировании цитат characetrs, переключение между ними может быть не таким уж причудливым...

Ответ 15

Ваш командный вкус или ваши рекомендации по разработке кода.

Если вы находитесь в многоязычной среде, вы можете поощрять использование одного и того же типа котировок для строк, используемых другим языком. Кроме того, мне лично нравится лучший вид "

Ответ 16

Нет, насколько я знаю. Хотя, если вы посмотрите на какой-то код, "обычно используется для строк текста (я думаю," чаще используется внутри текста, чем "), а" появляется в hashkeys и т.д.".

Ответ 17

Я стараюсь свести к минимуму оба пиксела и удивить. Я обычно предпочитаю ', чтобы минимизировать пиксели, но " вместо этого, если строка имеет апостроф, снова для минимизации пикселей. Однако для docstring я предпочитаю """ более ''', потому что последний является нестандартным, необычным и, следовательно, неожиданным. Если теперь у меня есть ряд строк, в которых я использовал " для указанной выше логики, но также и тот, который может уйти с помощью ', я все же могу использовать " в нем, чтобы сохранить согласованность, только чтобы свести к минимуму неожиданность.

Возможно, это помогает думать о философии минимизации пикселей следующим образом. Вы предпочли бы, чтобы английские символы выглядели как A B C или AA BB CC? Последний выбор отнимает 50% непустых пикселей.

Ответ 18

Я использую двойные кавычки, потому что я делал это в течение многих лет на большинстве языков (С++, Java, VB...), кроме Bash, потому что я также использую двойные кавычки в обычном тексте и потому что я использую (измененный) неанглийская клавиатура, где для обоих символов требуется клавиша shift.

Ответ 19

'= "

/= \= \\

пример:

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 не являются допустимыми escape файлами, такими как \t или \n или \\ или \"

Если вы хотите использовать одиночные обратные косые черты (и интерпретировать их как таковые), вам нужно использовать "сырую" строку. Вы можете сделать это, поставив 'r' перед строкой

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

Что касается путей в Windows, то косые черты интерпретируются одинаково. Ясно, что сама строка отличается. Я бы не стал гарантировать, что они будут обработаны таким образом на внешнем устройстве.