Я ищу форматированный строковый литерал. В частности, что-то эквивалентное
name = "Hello"
bytes(f"Some format string {name}")
Возможно, что-то вроде fb"Some format string {name}"
.
Существует ли такая вещь?
Я ищу форматированный строковый литерал. В частности, что-то эквивалентное
name = "Hello"
bytes(f"Some format string {name}")
Возможно, что-то вроде fb"Some format string {name}"
.
Существует ли такая вещь?
Нет. Идея явно отклоняется в PEP:
По той же причине, что мы не поддерживаем
bytes.format()
, вы можете не сочетать'f'
с'b'
строковыми литералами. Основная проблема заключается в том, что метод объекта__format__()
может возвращать данные Unicode который несовместим с байтовой строкой.Двоичные f-строки сначала потребуют решения для
bytes.format()
. Эта идея была предложена в прошлом, большинство недавно в PEP 461. Обсуждение такой функции обычно предложите либо
добавление метода, такого как
__bformat__()
, чтобы объект мог контролировать, как он преобразуется в байты, илиимеющий
bytes.format()
, не может быть общим или расширяемым какstr.format()
.Оба они остаются в качестве опций в будущем, если такая функциональность желательно.
Начиная с python 3.6.2 этот процент форматирования для байтов работает для некоторых случаев использования:
print(b"Some stuff %a. Some other stuff" % my_byte_or_unicode_string)
Но как заметил комментатор:
Это не то же самое. % a (или% r) даст представление строки, а не строку сама. Например, b '% a'% b'bytes 'даст b' b'bytes '', а не b'bytes '.
Что может иметь или не иметь значения в зависимости от того, нужно ли вам просто представить отформатированную byte_or_unicode_string в пользовательском интерфейсе или если вам потенциально необходимо выполнить дальнейшие манипуляции.
Это было одно из больших изменений, сделанных от python 2 до python3. Они обрабатывают unicode и строки по-разному.
Вот как вы конвертируете в байты.
string = "some string format"
string.encode()
print(string)
Вот как вы декодируете строку.
string.decode()
Я лучше оценил разницу между изменением Python 2 и 3 в unicode через эту лекцию coursera Чарльза Шевеленса. Вы можете смотреть весь 17-минутный видеоролик или быстро переходить туда примерно в 10:30, если хотите перейти к различиям между python 2 и 3 и как они обрабатывают символы и, в частности, unicode.
Я понимаю, что ваш реальный вопрос заключается в том, как вы можете форматировать строку с двумя строками и байтами.
inBytes = b"testing"
inString = 'Hello'
type(inString) #This will yield <class 'str'>
type(inBytes) #this will yield <class 'bytes'>
Здесь вы можете видеть, что у меня есть строка переменной и байтовой переменной.
Таким образом вы объедините байт и строку в одну строку.
formattedString=(inString + ' ' + inBytes.encode())