Форматирование строк с помощью метода format

Если для подстановки требуется только один аргумент, то значение - сам аргумент:

>>>

>>> 'Hello, {}!'.format('Vasya')

'Hello, Vasya!'

А если несколько, то значениями будут являться все аргументы со строками подстановки (обычных или именованных):

>>>

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

>>> '{}, {}, {}'.format('a', 'b', 'c')

'a, b, c'

>>> '{2}, {1}, {0}'.format('a', 'b', 'c')

'c, b, a'

>>> '{2}, {1}, {0}'.format(*'abc')

'c, b, a'

>>> '{0}{1}{0}'.format('abra', 'cad')

'abracadabra'

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')

'Coordinates: 37.24N, -115.81W'

>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}

>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)

'Coordinates: 37.24N, -115.81W'

Однако метод format умеет большее. Вот его синтаксис:

поле замены  ::= "{" [имя поля] ["!" преобразование] [":" спецификация] "}"

имя поля  ::= arg_name ("." имя атрибута | "[" индекс "]")*

преобразование::= "r" (внутреннее представление) | "s" (человеческое представление)

спецификация::= см. ниже

Например:

>>>

>>> "Units destroyed: {players[0]}".format(players = [1, 2, 3])

'Units destroyed: 1'

>>> "Units destroyed: {players[0]!r}".format(players = ['1', '2', '3'])

"Units destroyed: '1'"

Теперь спецификация формата:

спецификация::= [[fill]align][sign][#][0][width][,][.precision][type]

заполнитель::= символ кроме '{' или '}'

выравнивание::= "<" | ">" | "=" | "^"

знак   ::= "+" | "-" | " "

ширина ::= integer

точность::= integer

тип    ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" |

             "n" | "o" | "s" | "x" | "X" | "%"

Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:

Флаг Значение
'<' Символы-заполнители будут справа (выравнивание объекта по левому краю) (по умолчанию).
'>' выравнивание объекта по правому краю.
'=' Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами.
'^' Выравнивание по центру.

Опция "знак" используется только для чисел и может принимать следующие значения:

Флаг Значение
'+' Знак должен быть использован для всех чисел.
'-' '-' для отрицательных, ничего для положительных.
'Пробел' '-' для отрицательных, пробел для положительных.

Поле "тип" может принимать следующие значения:

Тип Значение
'd', 'i', 'u' Десятичное число.
'o' Число в восьмеричной системе счисления.
'x' Число в шестнадцатеричной системе счисления (буквы в нижнем регистре).
'X' Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
'e' Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
'E' Число с плавающей точкой с экспонентой (экспонента в верхнем регистре).
'f', 'F' Число с плавающей точкой (обычный формат).
'g' Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
'G' Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
'c' Символ (строка из одного символа или число - код символа).
's' Строка.
'%' Число умножается на 100, отображается число с плавающей точкой, а за ним знак %.

Несколько примеров:

>>>

>>> coord = (3, 5)

>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)

'X: 3; Y: 5'

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')

"repr() shows quotes: 'test1'; str() doesn't: test2"

>>> '{:<30}'.format('left aligned')

'left aligned             '

>>> '{:>30}'.format('right aligned')

'            right aligned'

>>> '{:^30}'.format('centered')

'      centered      '

>>> '{:*^30}'.format('centered') # use '*' as a fill char

'***********centered***********'

>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always

'+3.140000; -3.140000'

>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers

' 3.140000; -3.140000'

>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'

'3.140000; -3.140000'

>>> # format also supports binary numbers

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)

'int: 42; hex: 2a; oct: 52; bin: 101010'

>>> # with 0x, 0o, or 0b as prefix:

>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)

'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'

>>> points = 19.5

>>> total = 22

>>> 'Correct answers: {:.2%}'.format(points/total)

'Correct answers: 88.64%'

 

 


 


Контрольная работа №6

Списки массивы

Списки (list). Функции и методы списков

Что такое списки?

Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться).

Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект (например, строку) встроенной функцией list:

>>>

>>> list('список')

['с', 'п', 'и', 'с', 'о', 'к']

Список можно создать и при помощи литерала:

>>>

>>> s = [] # Пустой список

>>> l = ['s', 'p', ['isok'], 2]

>>> s

[]

>>> l

['s', 'p', ['isok'], 2]

Как видно из примера, список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего.

И еще один способ создать список - это генераторы списков. Генератор списков - способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.

>>>

>>> c = [c * 3 for c in 'list']

>>> c

['lll', 'iii', 'sss', 'ttt']

Возможна и более сложная конструкция генератора списков:

>>>

>>> c = [c * 3 for c in 'list' if c!= 'i']

>>> c

['lll', 'sss', 'ttt']

>>> c = [c + d for c in 'list' if c!= 'i' for d in 'spam' if d!= 'a']

>>> c

['ls', 'lp', 'lm', 'ss', 'sp', 'sm', 'ts', 'tp', 'tm']

Но в сложных случаях лучше пользоваться обычным циклом for для генерации списков.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: