Есть ли разница между строкой и «строкой» в Python?

В PHP строка, заключенная в «двойные кавычки», будет анализироваться для замены переменных, тогда как строка, заключенная в «одинарные кавычки», не будет. В Python это также применимо?


person davidmytton    schedule 27.09.2008    source источник


Ответы (9)


Нет:

2.4.1. Строковые и байтовые литералы

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

person Milen A. Radev    schedule 27.09.2008

Python — один из немногих (?) языков, где ' и " имеют одинаковую функциональность. Выбор для меня обычно зависит от того, что находится внутри. Если я собираюсь заключить в кавычки строку, в которой есть одинарные кавычки, я буду использовать двойные кавычки. и наоборот, чтобы сократить необходимость экранирования символов в строке.

Примеры:

"this doesn't require escaping the single quote"
'she said "quoting is easy in python"'

Это задокументировано на странице «Строковые литералы» документации по python:

person Bryan Oakley    schedule 27.09.2008

В некоторых других языках метасимволы не интерпретируются, если вы используете одинарные кавычки. Возьмите этот пример в 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
person Bruno Gomes    schedule 27.09.2008

Строки в одинарных и двойных кавычках в 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'
person efotinis    schedule 27.09.2008

Интерактивный интерпретатор Python предпочитает одинарные кавычки:

>>> "text"
'text'

>>> 'text'
'text'

Это может сбить с толку новичков, поэтому я бы придерживался одинарных кавычек (если у вас нет разных стандартов кодирования).

person Thorsten    schedule 03.01.2016
comment
Он предпочитает одинарные кавычки, если только одинарные кавычки не находятся в самой строке. Затем он переключается на двойные кавычки. IPython делает прямо противоположное. - person honza_p; 07.12.2017

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

Стиль

PEP8 рекомендует последовательное правило, PEP257 предполагает, что строки документации используют тройные двойные кавычки.

В Python строки в одинарных и двойных кавычках — это одно и то же. Этот PEP не дает рекомендаций по этому поводу. Выберите правило и придерживайтесь его. Однако, если строка содержит символы одинарной или двойной кавычки, используйте другую, чтобы избежать обратной косой черты в строке. Это улучшает читаемость.

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

Однако широко используется практика предпочитать двойные кавычки для строк на естественном языке (включая интерполяцию) - таким образом, все, что потенциально является кандидатом на I18N. И одинарные кавычки для технических строк: символы, символы, пути, параметры командной строки, технические REGEX, ...

(Например, при подготовке кода для I18N я запускаю полуавтоматический REGEX, быстро преобразующий строки с двойными кавычками для использования, например, gettext)

person kxr    schedule 15.03.2016
comment
мне понравилось слышать широко распространенную практику, звучит разумно - person hotzen; 24.11.2016

Есть 3 способа, которыми вы можете цитировать строки в python: "string" 'string' """ string string """ все они дают одинаковый результат.

person Vasil    schedule 27.09.2008
comment
на самом деле есть четвертый способ: '''строка''' - person nosklo; 27.09.2008
comment
и строки в тройных кавычках в первую очередь предназначены для многострочных комментариев. - person camflan; 27.09.2008

В 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'."""
person Steve Moyer    schedule 27.09.2008

да. Те, кто утверждает, что одинарные и двойные кавычки идентичны в 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.

person gseattle    schedule 27.08.2014
comment
Ваши методы тестирования ошибочны и на самом деле не отражают истину. Например, когда я запускаю ваш точный код на своем компьютере, результат с двойной кавычкой был постоянно (9 из 10 запусков) быстрее, чем результат с одинарной кавычкой. Что еще более важно, независимо от того, какое цитирование я использую первым, второй результат всегда быстрее, чем первый (то есть: я могу поместить код с двойными кавычками перед кодом с одинарными кавычками, а второй всегда быстрее). - person Bryan Oakley; 27.08.2014
comment
Сгенерированный байт-код также кажется таким же ... Это именно то, что справочник по языку говорит, что так и должно быть. - person Martin Tournoij; 27.08.2014
comment
Какая версия Брайан? я на 2.7.6 - person gseattle; 27.08.2014
comment
Спасибо. Я также изменил порядок разделов, прежде чем публиковать это, и одинарные кавычки всегда были быстрее, так что, думаю, пойди разберись. - person gseattle; 30.08.2014
comment
вы должны удалить это, прежде чем элитарное гестапо StackOverflow появится в толпе и понизит ваш пост - person touch my body; 14.08.2015