Ответ 1
Парсер Python интерпретирует это как одну строку. Это хорошо описано в документации Lexical Analysis:
Строковое литеральное конкатенация
Разрешены несколько соседних строковых литералов (ограниченных пробелами), возможно, с использованием разных соглашений о цитировании, и их значение совпадает с их конкатенацией. Таким образом,
"hello" 'world'
эквивалентно"helloworld"
.
Скомпилированный код Python видит только один строковый объект; вы можете увидеть это, попросив Python создать AST таких строк:
>>> import ast
>>> ast.dump(ast.parse("'hello' 'world'", mode='eval').body)
"Str(s='helloworld')"
Фактически, это самый акт построения AST, который запускает конкатенацию, по мере прохождения дерева синтаксиса, см. функцию parsestrplus()
в AST C.
Функция специально направлена на снижение потребности в обратных косых чертах; используйте его, чтобы разбить строку по физическим линиям, когда все еще находится в логической строке:
print('Hello world!', 'This string is spans just one '
'logical line but is broken across multiple physical '
'source lines.')
Несколько физических линий могут неявно соединяться в одну физическую линию с помощью круглых скобок, квадратных скобок или фигурных скобок.
Эта функция конкатенации строк была скопирована с C, но Guido van Rossum записывается с сожалением, добавив ее в Python. Этот пост пинает длинную и очень интересную нить с большой поддержкой для полного удаления этой функции.