Одинарные кавычки против.двойные кавычки в Python [закрыто]

StackOverflow https://stackoverflow.com/questions/56011

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Например:

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""", чтобы соответствовать ПЭП 257.

Я с Уиллом:

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

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

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

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

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

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

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

"If you're going to use apostrophes, 
       ^

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

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

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

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 и не увидел никакого упоминания об одинарных и двойных кавычках.

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

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

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

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

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

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

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

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

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

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

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

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

Я использую двойные кавычки, потому что делаю это уже много лет в большинстве языков (C++, Java, VB…), кроме Bash, потому что я также использую двойные кавычки в обычном тексте и потому что я использую (модифицированную) неанглийскую клавиатуру, где обоим символам требуется клавиша 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 недействительны escape-последовательности, например \t или \n или \\ или \"

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top