Одиночные кавычки против двойных кавычек в Python

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
718
0
596 206
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

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

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

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

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

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

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

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

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

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

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

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

eksortso 20.05.2010 19:28

Я предпочитаю везде одинарные кавычки для удобства чтения (действительно, двойные кавычки вызывают больше шума). Но поскольку я пришел из C, я почти автоматически ввожу двойные кавычки :)

wump 02.07.2010 11:48

@wump, да. Мой компилятор C# вечно жалуется на мои символьные литералы ...

Daren Thomas 06.07.2010 10:53

Использование повсюду простых кавычек для строк позволяет мне отключать части исходного кода с помощью трех двойных кавычек - типа '#if 0' и '#endif'.

dim 22.01.2011 01:53

PyCharm по умолчанию помечает строки документации в одинарных кавычках, есть идеи, почему?

Eloff 11.10.2011 00:07

@Eloff, нет. Понятия не имею почему. Хотя мне было бы интересно узнать ...

Daren Thomas 11.10.2011 10:50

" требует наличия клавиши Shift только на клавиатуре QWERTY ПК. На моей клавиатуре " действительно легче набирать.

e-satis 28.10.2011 16:49

@dim делает лучшее замечание в этом нелепом обсуждении, но у него поменяли местами одинарные и двойные кавычки из-за ответа PEP-257 и jblocksom.

cdunn2001 18.03.2012 00:24

на моей клавиатуре "и" оба требуют клавиши Shift.

Loïc Faure-Lacroix 08.07.2012 19:54

Этот ответ противоречит соглашению Python; см. PEP 257, в котором говорится: Для единообразия всегда используйте "" "тройные двойные кавычки" "" вокруг строк документации. python.org/dev/peps/pep-0257

Buttons840 11.06.2013 03:36

@ Buttons840, хороший звонок. Думаю, в будущем я буду использовать кавычки вместо апострофов. Хотя облом. Теперь мой код ооочень пушистый;)

Daren Thomas 11.06.2013 13:10

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

user2604985 03.05.2014 18:06
Ответ принят как подходящий

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

Например:

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

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

Mike A 21.10.2009 21:15

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

e-satis 08.03.2010 17:35

Интересно, действительно ли одинарные кавычки для символьных вещей происходят от ярлыка выражения кавычек в Lisp / Scheme. В любом случае интуитивно понятно. Кроме того, друзья, если мы следуем рекомендациям по стилю PEP 8, функции действительно должны называться lights_message () и is_pirate ().

yukondude 22.05.2010 21:42

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

SamB 17.11.2010 23:03

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

Daren Thomas 18.05.2011 15:58

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

Sake 12.01.2012 10:04

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

RoundTower 17.01.2012 02:26

Я с Уиллом:

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

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

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

Вероятно, это скорее стилистическое предпочтение, чем что-либо еще. Я только что проверил PEP 8 и не увидел упоминания о двойных кавычках и одинарных.

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

PEP 8 ссылается на PEP 257 в первом предложении в разделе «Строки документации». В PEP 257 говорится: Для единообразия всегда используйте "" "тройные двойные кавычки" "" вокруг строк документации. Используйте r "" "необработанные тройные двойные кавычки" "", если вы используете обратную косую черту в своих строках документации. Для строк документации Unicode используйте u "" "строки Unicode с тройными кавычками" "". Тем не менее, мне нравится чистый вид одинарных кавычек и одна причина нажатия клавиши, которую вы указали.

maxpolk 21.09.2013 21:45

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

In plain English: String literals can be enclosed in matching single quotes (') or double quotes (").

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

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

mlissner 06.08.2011 10:19

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

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

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

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

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

' = "

/ = \ = \

пример :

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, косая черта интерпретируется одинаково. Очевидно, что сама строка отличается. Однако я не могу гарантировать, что они обрабатываются таким образом на внешнем устройстве.

Черт возьми, это старое, но я все равно хотел прокомментировать, чтобы указать, что использование косой черты может работать для Windows, но все еще зависит от системы. Чтобы убедиться, что у вас нет зависимостей от ОС, используйте os.path.join()

Adam Smith 17.12.2013 03:38

In Perl you want to use single quotes when you have a string which doesn't need to interpolate variables or escaped characters like \n, \t, \r, etc.

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

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

Чтобы усилить то, что вы говорите, \ n будет интерпретироваться только в двойных кавычках в PHP и Perl, тогда как в Python будет работать как в двойных, так и в одинарных кавычках.

stivlo 06.03.2012 23:27

@stivlo: Если вы не сделаете из него необработанную строку, добавив r перед строковым литералом. Итак, print 'a\nb' напечатает вам две строки, а print r'a\nb' напечатает вам одну.

Tadeck 11.03.2012 08:25

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

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 2quotes2'
mystringliteral6='this is a string with 7quotes7'

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'''')

dolma33 15.03.2012 21:54

Вставьте разрыв строки между "кавычками" и "" "

Nicolas 16.05.2012 17:12

@ dolma33 Предложение Николаса изменило бы содержимое строки. Лучшее решение уже есть в ответе: если ваша строка заканчивается какой-то цитатой, используйте тройную кавычку типа Другой. Например, '''This is a string with "quotes"'''.

jpmc26 18.03.2014 03:13

"If you're going to use apostrophes, 
       ^

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

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

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

«Если вы собираетесь« цитировать »что-то, вам обязательно нужно использовать одинарные кавычки»

Paolo 28.09.2013 20:35

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

Droogans 30.09.2013 19:39

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

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

Другие вопросы по теме