Эта ссылка перечисляет некоторые специфичные для 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 добавляет еще один набор экранированных обратных косых черт, что для меня не имеет никакого смысла.
Вопросы:
Как вы думаете, почему unicode_escape()является или было бы необходимы для вашего варианта использования? Просто потому, что что-то существует, это не значит, что это важно или актуально для вас.
@CharlesDuffy Я пишу скрипт на Python, который принимает в качестве аргумента путь в стиле Windows. Таким образом, скрипт работает без проблем. Я просто хотел убедиться, есть ли случаи, когда мне нужно преобразовать ввод arg с помощью unicode_escape?
Назначение unicode_escape() - генерировать контент, который можно подставить непосредственно в исходный файл Python в обычном формате ASCII. Вы этого не делаете, значит, вам это не нужно.
@CharlesDuffy Не могли бы вы привести мне пример, в котором нужно «генерировать контент, который может быть заменен непосредственно в исходный файл Python в обычном формате ASCII»?
Хм. Я потенциально мог бы увидеть необходимость в этом, если бы вы писали декомпилятор Python (хотя существующие декомпиляторы с такой же вероятностью реализуют эту функцию непосредственно сами, как и используют то, что предоставляет библиотека). Я также видел генерацию кода, используемую для генерации механизма шаблонов, хотя более свежие / современные примеры строят деревья AST, а не текстовый источник.
Честно говоря, "как можно использовать X?" это полностью открытый вопрос, и мы не разрешаем его здесь. Вопросы должны быть конкретными и основываться на реальной проблеме, с которой вы сталкиваетесь.
@CharlesDuffy Понятно! Спасибо за пример.






Цитата документ, который вы связали:
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).
Если вы используете
print(l), вы увидите, что в фактическом содержимом строки обратная косая черта не экранируется. Версия строкиreprизбегает обратной косой черты, чтобы однозначно показать ее вам, разработчику.