Я определенно предпочитаю метод format
больше, так как он очень гибкий и его можно легко расширить до ваших пользовательских классов, указав представления __format__
или str
или repr
. Для удобства использования я использую print
в следующих примерах, которые можно заменить на sys.stdout.write
.
Простые примеры: выравнивание / заполнение
blockquote>#Justify / ALign (left, mid, right) print("{0:<10}".format("Guido")) # 'Guido ' print("{0:>10}".format("Guido")) # ' Guido' print("{0:^10}".format("Guido")) # ' Guido '
Мы можем добавить рядом с
align
, которые задают^
,<
и>
символ заполнения для замены пробела любым другим символом< blockquote>print("{0:.^10}".format("Guido")) #..Guido...
Примеры нескольких последовательностей: выравнивание и заполнение многих входов
blockquote>print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum")) #'Product............. ...............Price ........Sum.........'
Расширенные примеры
blockquote>Если у вас есть пользовательские классы, вы можете определить его представления
str
илиrepr
следующим образом:class foo(object): def __str__(self): return "...::4::.." def __repr__(self): return "...::12::.."
Теперь вы можете использовать
!s
(str) или!r
(repr), чтобы указать python называть те, которые определены методы. Если ничего не определено, Python по умолчанию имеет значение__format__
, которое также может быть перезаписано. x = foo ()print "{0!r:<10}".format(x) #'...::12::..' print "{0!s:<10}".format(x) #'...::4::..'
Источник: базовая ссылка Python, David M. Beazley, 4th Edition