Почему '\ n' хранится как один элемент, используя цикл for? - PullRequest
0 голосов
/ 03 мая 2018

Этот вопрос в основном связан со мной, желающим лучше понять, как работает python.

Итак, я только что сделал простую функцию, которая является более динамичной версией функции .split() (она допускает несколько разбиений, одним из которых является '\n', поэтому я могу лучше отформатировать некоторую информацию CSV), но я не Не знаю точно, почему один из аспектов работает. Когда вы перебираете строку, такую ​​как "Hello there!\nGeneral Kenobi.", с циклом for, например - for letter in string, почему переменная 'letter' хранит '\n' как одну строку, а не '\' и в следующей итерации 'n'

Код, который я знаю, делает это:

myString = "This is a string\nThis is a string"
for letter in myString:
    print(repr(letter))

Просто чтобы прояснить, я люблю, что это делает это, но я просто хочу знать, почему.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Внутри строкового литерала ( справочная страница для Python 3 ) экранированные символы, т.е. те, которые начинаются с обратной косой черты "\", заменяются и интерпретируются в соответствии с некоторые правила. Вы можете заставить python интерпретировать «\» (обратную косую черту) как один символ, добавив к строковому литералу букву «r» или «R».

Таким образом, "\n" на самом деле представляет собой два символа в вашем исходном коде, но он интерпретируется Python как символ ASCII "LINE FEED"

Замечание о пользовательском вводе

Строка, переданная с Python2 input(), обрабатывается так же, как строковые литералы (строки, которые вы определяете в коде, просто записывая их между кавычками). В обоих случаях «\n» интерпретируется как один символ LINE FEED.

С другой стороны, Python3 input() и Python2 raw_input() считывают необработанную строку, , т.е."\n" интерпретируется как два символа.

Так что если в вашем примере (я предполагаю Python3) вы используете

myString = input()

и передайте "This is a string\nThis is a string" в качестве входных данных, тогда цикл for будет выполнять итерацию для "\" и "n" отдельно.

0 голосов
/ 03 мая 2018

Существует несоответствие между тем, что мы видим как «персонаж», и тем, что видит питон, мы видим \ и n, каждый из которых имеет свое собственное значение. Однако Python читает \n, поскольку \ означает * игнорировать следующий символ. Таким образом, Python читает \n, а не \ и n. Это \n для python "Конец строки", поэтому мы не должны интерпретировать это как \n (\, n), а как end of line (ввод).

* oversimplefied

0 голосов
/ 03 мая 2018

Потому что это один символ. \ обычно является символом «escape» во многих контекстах, что означает, что он и следующие символы не являются буквально частью строки, а представляют собой представление символа или другой структуры, которая не имеет письменное представление или не может быть легко предоставлено в этом контексте (например, перевод строки). Фактически, литерал \n в строке будет отображаться как \\n (где сам \ должен быть экранирован, чтобы указать, что это литерал \).

...