Python 3: нужно ли использовать кодировку unicode_escape?

Эта ссылка перечисляет некоторые специфичные для Python кодировки.

Одна из кодировок - unicode_escape.

Я просто пытаюсь понять, действительно ли нужна эта специальная кодировка?

>>> l = r'C:\Users\userx\toot'
>>> l
'C:\\Users\\userx\\toot'
>>> l.encode('unicode_escape').decode()
'C:\\\\Users\\\\userx\\\\toot'

Если вы могли видеть выше, 'l', который является объектом Unicode, уже позаботился об экранировании обратной косой черты. Преобразование его в кодировку unicode_escape добавляет еще один набор экранированных обратных косых черт, что для меня не имеет никакого смысла.

Вопросы:

  1. Действительно ли нужна кодировка unicode_escape?
  2. почему "unicode_escape" добавил еще один набор обратных косых черт выше?

Если вы используете print(l), вы увидите, что в фактическом содержимом строки обратная косая черта не экранируется. Версия строки repr избегает обратной косой черты, чтобы однозначно показать ее вам, разработчику.

khelwood 18.11.2018 16:07

Как вы думаете, почему unicode_escape()является или было бы необходимы для вашего варианта использования? Просто потому, что что-то существует, это не значит, что это важно или актуально для вас.

Charles Duffy 18.11.2018 16:15

@CharlesDuffy Я пишу скрипт на Python, который принимает в качестве аргумента путь в стиле Windows. Таким образом, скрипт работает без проблем. Я просто хотел убедиться, есть ли случаи, когда мне нужно преобразовать ввод arg с помощью unicode_escape?

krazykode101 18.11.2018 16:18

Назначение unicode_escape() - генерировать контент, который можно подставить непосредственно в исходный файл Python в обычном формате ASCII. Вы этого не делаете, значит, вам это не нужно.

Charles Duffy 18.11.2018 16:19

@CharlesDuffy Не могли бы вы привести мне пример, в котором нужно «генерировать контент, который может быть заменен непосредственно в исходный файл Python в обычном формате ASCII»?

krazykode101 18.11.2018 16:27

Хм. Я потенциально мог бы увидеть необходимость в этом, если бы вы писали декомпилятор Python (хотя существующие декомпиляторы с такой же вероятностью реализуют эту функцию непосредственно сами, как и используют то, что предоставляет библиотека). Я также видел генерацию кода, используемую для генерации механизма шаблонов, хотя более свежие / современные примеры строят деревья AST, а не текстовый источник.

Charles Duffy 18.11.2018 16:40

Честно говоря, "как можно использовать X?" это полностью открытый вопрос, и мы не разрешаем его здесь. Вопросы должны быть конкретными и основываться на реальной проблеме, с которой вы сталкиваетесь.

Charles Duffy 18.11.2018 16:42

@CharlesDuffy Понятно! Спасибо за пример.

krazykode101 18.11.2018 16:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
1 348
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Цитата документ, который вы связали:

Encoding suitable as the contents of a Unicode literal in ASCII-encoded Python source code, except that quotes are not escaped. Decodes from Latin-1 source code. Beware that Python source code actually uses UTF-8 by default.

Таким образом, print(l.encode('unicode_escape').decode()) делает что-то почти точно эквивалентенprint(repr(l)), за исключением того, что он не добавляет кавычки снаружи и escape-кавычки внутри строки.

Когда вы отключаете print(), REPL выполняет repr() по умолчанию, поэтому вы дважды экранируете обратную косую черту - точно так же, как и при запуске >>> repr(l).

Другие вопросы по теме