How do I split the definition of a long string over multiple lines?
Как мне разделить определение длинной строки на несколько строк?
У меня очень длинный запрос. Я хотел бы разделить его на несколько строк на Python. Способ сделать это в JavaScript - использовать несколько предложений и соединить их с помощью + оператора (я знаю, возможно, это не самый эффективный способ сделать это, но я действительно не беспокоюсь о производительности на данном этапе, просто о удобочитаемости кода). Пример:
var long_string = 'some text not important. just garbage to' + 'illustrate my example';
Я пытался сделать что-то подобное в Python, но это не сработало, поэтому я использовал \ для разделения длинной строки. Однако я не уверен, что это единственный / лучший / самый питонистский способ сделать это. Это выглядит неуклюже. Фактический код:
Вы говорите о многострочных строках? Легко, используйте тройные кавычки, чтобы начинать и заканчивать их.
s = """ this is a very long string if I had the energy to type more and more ..."""
Вы также можете использовать одинарные кавычки (конечно, по 3 в начале и в конце) и обрабатывать результирующую строку s точно так же, как любую другую строку.
ПРИМЕЧАНИЕ: Как и в случае с любой строкой, все, что находится между начальной и конечной кавычками, становится частью строки, поэтому в этом примере есть начальный пробел (как указано @root45). Эта строка также будет содержать как пробелы, так и новые строки.
Т.е.,:
' this is a very\n long string if I had the\n energy to type more and more ...'
Наконец, в Python также можно создавать длинные строки следующим образом:
s = ("this is a very" "long string too" "for sure ..." )
который не будет включать никаких дополнительных пробелов или перевода строк (это преднамеренный пример, показывающий, к чему приведет пропуск пробелов):
'this is a verylong string toofor sure ...'
Запятые не требуются, просто поместите соединяемые строки в пару круглых скобок и обязательно учтите все необходимые пробелы и переводы строк.
Ответ 2
Если вам не нужна многострочная строка, а просто длинная однострочная строка, вы можете использовать круглые скобки. Просто убедитесь, что вы не ставите запятые между сегментами строки (тогда это будет кортеж).
query = ('SELECT action.descr as "action", ' 'role.id as role_id,' 'role.descr as role' ' FROM ' 'public.role_action_def,' 'public.role,' 'public.record_def, ' 'public.action' ' WHERE role.id = role_action_def.role_id AND' ' record_def.id = role_action_def.def_id AND' ' action.id = role_action_def.action_id AND' ' role_action_def.account_id = '+account_id+' AND' ' record_def.account_id='+account_id+' AND' ' def_id='+def_id)
В инструкции SQL, подобной той, которую вы создаете, многострочные строки также были бы хороши. Но если дополнительные пробелы, которые будет содержать многострочная строка, будут проблемой, то это был бы хороший способ достичь того, чего вы хотите.
Как отмечалось в комментариях, такое объединение SQL-запросов представляет собой угрозу безопасности SQL-инъекций, ожидающую своего появления, поэтому используйте функцию параметризованных запросов вашей базы данных, чтобы предотвратить это. Однако я оставляю ответ как есть, в противном случае, поскольку он напрямую отвечает на заданный вопрос.
Ответ 3
Разбиение строк на \ работает для меня. Вот пример:
longStr = "This is a very long string " \ "that I wrote to help somebody " \ "who had a question about " \ "writing long strings in Python"
Ответ 4
Я обнаружил, что при построении длинных строк вы обычно делаете что-то вроде построения SQL-запроса, и в этом случае это лучше всего: