Форматирование строк в Python% i - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно преобразовать код из Python2.x в Python3 (в основном строковый формат). Я наткнулся на что-то вроде этого:

Logger.info("random String %d and %i".format(value1, value2))

Теперь я знаю, что% d можно заменить на {: d}но не удалось найти эквивалент% i (Подпись) с помощью {: i} выдает следующую ошибку:

ValueError: Неизвестный код формата 'i' для объекта типа 'int'

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Краткий ответ: спецификация Python3 str.format () отказалась от поддержки «i» (% i или {: i}).Он использует только «d» (% d или {: d}) для указания целых чисел.Поэтому вы можете просто использовать {: d} для всех целых чисел.

Длинный ответ: Для вывода, то есть для printf или ведения журнала,% i и% d на самом деле одно и то же, как в Python, так и в C. Есть разница, но только когда вы используете их для разбора ввода,как с scanf ().Для scanf% d и% i фактически означают целое число со знаком, но% i интерпретирует ввод как шестнадцатеричное число, если ему предшествует 0x, и восьмеричное, если ему предшествует 0, и иначе интерпретирует ввод как десятичное.Поэтому для обычного использования всегда лучше использовать% d, если вы не хотите указывать ввод как шестнадцатеричный или восьмеричный.

Для получения более подробной информации, пожалуйста, взгляните на спецификацию формата здесь: https://docs.python.org/2/library/string.html#formatspec

0 голосов
/ 17 декабря 2018

% i - это всего лишь альтернатива% d, если вы хотите взглянуть на это на высоком уровне (с точки зрения python).

Вот что python.org должен сказать о% i:Знаковое целое число десятичное.

И% d: знаковое целое число десятичное.

% d обозначает десятичное число и% i - целое число.

, но оба одинаковы, вы можете использовать оба.

так что вы можете перевести их таким же образом.

0 голосов
/ 17 декабря 2018

В Python нет разницы между %d и %i, поэтому вы можете перевести их таким же образом.%i существует только для совместимости с функциями printf других языков.

...