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






Вкус вашей команды или рекомендации по кодированию вашего проекта.
Если вы работаете в многоязычной среде, вы можете поощрять использование того же типа кавычек для строк, например, которые использует другой язык. Лично мне больше всего нравится внешний вид '
Насколько я знаю, нет. Хотя, если вы посмотрите на какой-то код, "" обычно используется для строк текста (я полагаю, 'внутри текста чаще, чем'), а '' появляется в хэш-ключах и тому подобном.
Если имеющаяся у вас строка содержит одну, то вам следует использовать другую. Например, "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.
Я предпочитаю везде одинарные кавычки для удобства чтения (действительно, двойные кавычки вызывают больше шума). Но поскольку я пришел из C, я почти автоматически ввожу двойные кавычки :)
@wump, да. Мой компилятор C# вечно жалуется на мои символьные литералы ...
Использование повсюду простых кавычек для строк позволяет мне отключать части исходного кода с помощью трех двойных кавычек - типа '#if 0' и '#endif'.
PyCharm по умолчанию помечает строки документации в одинарных кавычках, есть идеи, почему?
@Eloff, нет. Понятия не имею почему. Хотя мне было бы интересно узнать ...
" требует наличия клавиши Shift только на клавиатуре QWERTY ПК. На моей клавиатуре " действительно легче набирать.
@dim делает лучшее замечание в этом нелепом обсуждении, но у него поменяли местами одинарные и двойные кавычки из-за ответа PEP-257 и jblocksom.
на моей клавиатуре "и" оба требуют клавиши Shift.
Этот ответ противоречит соглашению Python; см. PEP 257, в котором говорится: Для единообразия всегда используйте "" "тройные двойные кавычки" "" вокруг строк документации. python.org/dev/peps/pep-0257
@ Buttons840, хороший звонок. Думаю, в будущем я буду использовать кавычки вместо апострофов. Хотя облом. Теперь мой код ооочень пушистый;)
Спасибо, что указали, что " требует shift, я почти забыл об этом. Я придерживаюсь '. Я всегда думал, что " и ' в некоторых случаях имеют разную функциональность, но поскольку они одинаковы, я не понимаю, зачем мне использовать ".
Мне нравится использовать двойные кавычки для строк, которые используются для интерполяции или сообщений на естественном языке, и одинарные кавычки для небольших символьных строк, но это нарушит правила, если строки содержат кавычки или если я забуду. Я использую тройные двойные кавычки для строк документации и необработанные строковые литералы для регулярных выражений, даже если они не нужны.
Например:
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. Может быть, это как-то связано с правилами английских цитат.
Большинство программистов на Python так кодируют. Явного правила нет, но поскольку мы часто читаем код таким образом, это становится привычкой.
Интересно, действительно ли одинарные кавычки для символьных вещей происходят от ярлыка выражения кавычек в Lisp / Scheme. В любом случае интуитивно понятно. Кроме того, друзья, если мы следуем рекомендациям по стилю PEP 8, функции действительно должны называться lights_message () и is_pirate ().
@ user48814: да, держу пари, просто большая часть прочитанного вами кода подсознательно подтолкнула вас в этом направлении.
Я думаю, что Perl проводил различие между строками в одинарных кавычках (без интерполяции) и строками в двойных кавычках (с интерполяцией), и что программисты на Python могли унаследовать эту привычку или никогда не отпустить ее.
Этот ответ может звучать хорошо, но на практике я обнаружил, что постоянно думать, какую цитату использовать, раздражает. Правило также в некоторых ситуациях неоднозначно. После нескольких недель использования этого подхода я снова вернулся к использованию одинарных кавычек для всего.
Я использую то же соглашение, плюс я злоупотребляю им, заставляя vim выделять все внутри тройных одинарных кавычек как SQL.
Я с Уиллом:
Я буду придерживаться этого, даже если это означает много побегов.
Я получаю наибольшую пользу от идентификаторов в одиночных кавычках, которые выделяются из-за кавычек. Остальные методы предназначены только для того, чтобы дать этим одиночным цитируемым идентификаторам некоторое пространство.
Вероятно, это скорее стилистическое предпочтение, чем что-либо еще. Я только что проверил PEP 8 и не увидел упоминания о двойных кавычках и одинарных.
Я предпочитаю одинарные кавычки, потому что это только одно нажатие клавиши вместо двух. То есть мне не нужно нажимать клавишу Shift, чтобы сделать одинарную кавычку.
PEP 8 ссылается на PEP 257 в первом предложении в разделе «Строки документации». В PEP 257 говорится: Для единообразия всегда используйте "" "тройные двойные кавычки" "" вокруг строк документации. Используйте r "" "необработанные тройные двойные кавычки" "", если вы используете обратную косую черту в своих строках документации. Для строк документации Unicode используйте u "" "строки Unicode с тройными кавычками" "". Тем не менее, мне нравится чистый вид одинарных кавычек и одна причина нажатия клавиши, которую вы указали.
Цитата из официальных документов на https://docs.python.org/2.0/ref/strings.html:
In plain English: String literals can be enclosed in matching single quotes (') or double quotes (").
Так что разницы нет. Вместо этого люди скажут вам выбрать тот стиль, который соответствует контексту, и быть последовательным. И я бы согласился - добавив, что бессмысленно пытаться придумывать «условности» для такого рода вещей, потому что в конечном итоге вы только запутаете новичков.
да, для меня последовательность является ключевым моментом, поэтому я просто везде использую синглы. Меньше нажатий клавиш, однозначное и последовательное.
Лично я придерживаюсь одного или другого. Неважно. И придание собственного значения любой цитате - это просто сбить с толку других людей, когда вы сотрудничаете.
Я решил использовать двойные кавычки, потому что их легче увидеть.
Я просто использую то, что приходит мне в голову в то время; удобно переключаться между ними по прихоти!
Конечно, при цитировании персонажей цитат переключение между ними может быть не таким уж прихотливым ...
Комментарии с тройными кавычками - это интересная подтема этого вопроса. 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()
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: Если вы не сделаете из него необработанную строку, добавив r перед строковым литералом. Итак, print 'a\nb' напечатает вам две строки, а print r'a\nb' напечатает вам одну.
Я использую двойные кавычки, потому что я делал это в течение многих лет на большинстве языков (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 Предложение Николаса изменило бы содержимое строки. Лучшее решение уже есть в ответе: если ваша строка заканчивается какой-то цитатой, используйте тройную кавычку типа Другой. Например, '''This is a string with "quotes"'''.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
По этой простой причине я всегда использую двойные кавычки снаружи. Всегда
Говоря о чуши, какой толк в оптимизации строковых литералов с помощью ', если вам придется использовать escape-символы для представления апострофов? Кодировщикам не нравится читать романы? Я не могу представить, насколько болезненными для вас были уроки английского в старшей школе!
«Если вы собираетесь« цитировать »что-то, вам обязательно нужно использовать одинарные кавычки»
Мое мнение об этом сильно изменилось с тех пор, как я написал это. Это просто одна из ситуаций, когда я бы сказал, что использовал бы двойные кавычки. Другой был бы вашим в контексте использования одинарных кавычек. Более подробно мою текущую позицию по этому поводу см. В принятый ответ. Я считаю, что это отличный пример того, как это следует представить широкой аудитории.
Я стремлюсь минимизировать количество пикселей и удивление. Я обычно предпочитаю ', чтобы минимизировать количество пикселей, но вместо этого ", если в строке есть апостроф, опять же, чтобы минимизировать количество пикселей. Однако для строки документации я предпочитаю """, а не ''', потому что последний нестандартен, необычен и поэтому удивителен. Если теперь у меня есть набор строк, в которых я использовал " согласно приведенной выше логике, но также и тот, который может уйти с ', я все равно могу использовать " в нем для сохранения согласованности, только чтобы свести к минимуму удивление.
Возможно, стоит подумать о философии минимизации пикселей следующим образом. Вы бы предпочли, чтобы английские символы выглядели как A B C или AA BB CC? В последнем случае тратится 50% непустых пикселей.
Я предпочитаю одинарные кавычки, так как я пишу код SQL каждый день, а одинарные кавычки используются для строковых литералов в T-SQL. Но я использую тройные двойные кавычки, потому что в строках документации иногда может быть немного лишнего.