Формат рядка Python ()

Метод string format () форматує даний рядок у приємніший результат у Python.

Синтаксис format()методу:

 template.format (p0, p1,…, k0 = v0, k1 = v1,…)

Тут p0, p1,… - позиційні аргументи, а k0, k1,… - аргументи ключових слів зі значеннями v0, v1,… відповідно.

І шаблон являє собою суміш кодів формату із заповнювачами для аргументів.

Формат рядка () Параметри

format()метод приймає будь-яку кількість параметрів. Але, поділяється на два типи параметрів:

  • Позиційні параметри - список параметрів, до яких можна отримати доступ за допомогою індексу параметра всередині фігурних дужок(index)
  • Параметри ключового слова - список параметрів типу key = value, до яких можна отримати доступ за допомогою ключа параметра всередині фігурних дужок(key)

Повернути значення з формату String ()

format()Метод повертає отформатированную рядок.

Як працює формат рядка ()?

format()Зчитує тип аргументів , переданих в нього , і форматує його в відповідно до кодів формату , визначених у рядку.

Для позиційних аргументів

Позиційні аргументи

Тут аргумент 0 - це рядок "Адам", а аргумент 1 - плаваюче число 230.2346.

Примітка: Список аргументів починається з 0 у Python.

Рядок "Hello (0), your balance is (1:9.3f)"- це рядок шаблону. Він містить коди форматування для форматування.

Фігурні дужки - це просто заповнювачі для розміщення аргументів. У наведеному вище прикладі (0) є заповнювачем для "Адама", а (1: 9.3f) - заповнювачем для 230.2346.

Оскільки рядок шаблону посилається на format()аргументи як (0)та (1), аргументи є позиційними аргументами. На них обох також можна посилатися без чисел, оскільки ()Python внутрішньо перетворює їх у числа.

Внутрішньо,

  • Оскільки "Адам" є 0- м аргументом, його ставлять замість (0). Оскільки, (0)не містить інших кодів формату, він не виконує жодних інших операцій.
  • Однак це не стосується 1- го аргументу 230.2346. Тут (1:9.3f)розміщує 230.2346 на своєму місці і виконує операцію 9.3f.
  • f вказує формат, що має справу з плаваючим числом. Якщо неправильно вказано, це видасть помилку.
  • Частина перед "." (9) визначає мінімальну ширину / доповнення, яке може прийняти число (230,2346). У цьому випадку 230.2346 відведено мінімум 9 місць, включаючи ".".
    Якщо параметр вирівнювання не вказаний, він вирівнюється праворуч від решти пробілів. (Для рядків він вирівняний ліворуч.)
  • Частина після "." (3) скорочує десяткову частину (2346) до заданого числа. У цьому випадку 2346 усічується після 3 місць.
    Залишкові номери (46) округляються до виведення 235.

Для аргументів ключового слова

Аргументи ключового слова

Ми використовували той самий приклад зверху, щоб показати різницю між ключовими словами та позиційними аргументами.

Тут замість просто параметрів ми використали ключ-значення для параметрів. А саме, ім'я = "Адам" і blc = 230,2346.

Оскільки ці параметри посилаються на свої ключі як (ім'я) та (blc: 9.3f), вони відомі як аргументи ключового слова або імені.

Внутрішньо,

  • Заповнювач (ім'я) замінюється значенням імені - "Адам". Оскільки він не містить інших кодів формату, розміщується "Адам".
  • Для аргументу blc = 230.2346 заповнювач (blc: 9.3f) замінюється значенням 230.2346. Але перед заміною, як і в попередньому прикладі, він виконує над ним операцію 9.3f.
    Це виводить 230.235. Десяткова частина скорочується після 3-х знаків, а решта цифр округлюються. Так само загальна ширина присвоюється 9, залишаючи два пробіли ліворуч.

Базове форматування за допомогою формату ()

format()Метод дозволяє використовувати прості наповнювачі для форматування.

Приклад 1: Основне форматування для аргументів за замовчуванням, позицій та ключових слів

 # default arguments print("Hello (), your balance is ().".format("Adam", 230.2346)) # positional arguments print("Hello (0), your balance is (1).".format("Adam", 230.2346)) # keyword arguments print("Hello (name), your balance is (blc).".format(name="Adam", blc=230.2346)) # mixed arguments print("Hello (0), your balance is (blc).".format("Adam", blc=230.2346))

Вихідні дані

Привіт, Адаме, твій баланс становить 230,2346. Привіт, Адаме, твій баланс становить 230,2346. Привіт, Адаме, твій баланс становить 230,2346. Привіт, Адаме, твій баланс становить 230,2346.

Примітка: У разі змішаних аргументів аргументи ключових слів завжди повинні слідувати позиційним аргументам.

Форматування чисел за допомогою формату ()

Ви можете відформатувати номери за допомогою специфікатора формату, наведеного нижче:

Типи форматування чисел
Тип Значення
d Десяткове ціле число
c Відповідний символ Unicode
b Бінарний формат
o Восьмеричний формат
х Шістнадцятковий формат (нижній регістр)
X Шістнадцятковий формат (верхній регістр)
п Те саме, що і "d". За винятком того, що він використовує поточні налаштування мови для роздільника чисел
e Експоненціальне позначення. (мала літера e)
Е Exponential notation (uppercase E)
f Displays fixed point number (Default: 6)
F Same as 'f'. Except displays 'inf' as 'INF' and 'nan' as 'NAN'
g General format. Rounds number to p significant digits. (Default precision: 6)
G Same as 'g'. Except switches to 'E' if the number is large.
% Percentage. Multiples by 100 and puts % at the end.

Example 2: Simple number formatting

 # integer arguments print("The number is:(:d)".format(123)) # float arguments print("The float number is:(:f)".format(123.4567898)) # octal, binary and hexadecimal format print("bin: (0:b), oct: (0:o), hex: (0:x)".format(12))

Output

 The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c

Example 3: Number formatting with padding for int and floats

 # integer numbers with minimum width print("(:5d)".format(12)) # width doesn't work for numbers longer than padding print("(:2d)".format(1234)) # padding for float numbers print("(:8.3f)".format(12.2346)) # integer numbers with minimum width filled with zeros print("(:05d)".format(12)) # padding for float numbers filled with zeros print("(:08.3f)".format(12.2346))

Output

 1 2 1 2 3 4 1 2 . 2 3 5 0 0 0 1 2 0 0 1 2 . 2 3 5 

Here,

  • in the first statement, (:5d) takes an integer argument and assigns a minimum width of 5. Since, no alignment is specified, it is aligned to the right.
  • In the second statement, you can see the width (2) is less than the number (1234), so it doesn't take any space to the left but also doesn't truncate the number.
  • Unlike integers, floats has both integer and decimal parts. And, the mininum width defined to the number is for both parts as a whole including ".".
  • In the third statement, (:8.3f) truncates the decimal part into 3 places rounding off the last 2 digits. And, the number, now 12.235, takes a width of 8 as a whole leaving 2 places to the left.
  • If you want to fill the remaining places with zero, placing a zero before the format specifier does this. It works both for integers and floats: (:05d) and (:08.3f).

Example 4: Number formatting for signed numbers

 # show the + sign print("(:+f) (:+f)".format(12.23, -12.23)) # show the - sign only print("(:-f) (:-f)".format(12.23, -12.23)) # show space for + sign print("(: f) (: f)".format(12.23, -12.23))

Output

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Форматування чисел з вирівнюванням

Оператори and =використовуються для вирівнювання, коли числам присвоєна певна ширина.

Форматування чисел з вирівнюванням
Тип Значення
< Вирівняно за лівим місцем, що залишилося
^ Вирівняйте по центру до місця, що залишилося
> Вирівняно вправо до залишку
= Змушує підписаний (+) (-) в крайнє ліве положення

Приклад 5: Форматування чисел із вирівнюванням за лівим, правим та центром

 # integer numbers with right alignment print("(:5d)".format(12)) # float numbers with center alignment print("(:^10.3f)".format(12.2346)) # integer left alignment filled with zeros print("(:<05d)".format(12)) # float numbers with center alignment print("(:=8.3f)".format(-12.2346))

Вихідні дані

1 2 1 2. 2 3 5 1 2 0 0 0 - 1 2. 2 3 5

Примітка: Ліве вирівнювання, заповнене нулями для цілих чисел, може спричинити проблеми як 3-й приклад, який повертає 12000, а не 12.

Форматування рядка за допомогою формату ()

Як числа, рядок може бути відформатовано подібним чином format().

Example 6: String formatting with padding and alignment

 # string padding with left alignment print("(:5)".format("cat")) # string padding with right alignment print("(:>5)".format("cat")) # string padding with center alignment print("(:^5)".format("cat")) # string padding with center alignment # and '*' padding character print("(:*^5)".format("cat"))

Output

 c a t c a t c a t * c a t * 

Example 7: Truncating strings with format()

 # truncating strings to 3 letters print("(:.3)".format("caterpillar")) # truncating strings to 3 letters # and padding print("(:5.3)".format("caterpillar")) # truncating strings to 3 letters, # padding and center alignment print("(:^5.3)".format("caterpillar"))

Output

 c a t c a t c a t 

Formatting class and dictionary members using format()

Python internally uses getattr() for class members in the form ".age". And, it uses __getitem__() lookup for dictionary members in the form "(index)".

Example 8: Formatting class members using format()

 # define Person class class Person: age = 23 name = "Adam" # format age print("(p.name)'s age is: (p.age)".format(p=Person()))

Output

 Adam's age is: 23 

Here, Person object is passed as a keyword argument p.

Inside the template string, Person's name and age are accessed using .name and .age respectively.

Example 9: Formatting dictionary members using format()

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(p(name))'s age is: (p(age))".format(p=person))

Output

 Adam's age is: 23 

Similar to class, person dictionary is passed as a keyword argument p.

Inside the template string, person's name and age are accessed using (name) and (age) respectively.

There's an easier way to format dictionaries in Python using str.format(**mapping).

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(name)'s age is: (age)".format(**person))

** is a format parameter (minimum field width).

Arguments as format codes using format()

You can also pass format codes like precision, alignment, fill character as positional or keyword arguments dynamically.

Example 10: Dynamic formatting using format()

 # dynamic string format template string = "(:(fill)(align)(width))" # passing format codes as arguments print(string.format('cat', fill='*', # dynamic float format template num = "(:(align)(width).(precision)f)" # passing format codes as arguments print(num.format(123.236,>

Output

 * * c a t * * 1 2 3 . 2 4 

Here,

  • In the first example, 'cat' is the positional argument is to be formatted. Likewise, fill='*', align='^' and width=5 are keyword arguments.
  • In the template string, these keyword arguments are not retrieved as normal strings to be printed but as the actual format codes fill, align and width.
    The arguments replaces the corresponding named placeholders and the string 'cat' is formatted accordingly.
  • Likewise, in the second example, 123.236 is the positional argument and, align, width and precision are passed to the template string as format codes.

Extra formatting options with format()

format() also supports type-specific formatting options like datetime's and complex number formatting.

format() internally calls __format__() for datetime, while format() accesses the attributes of the complex number.

You can easily override the __format__() method of any object for custom formatting.

Example 11: Type-specific formatting with format() and overriding __format__() method

 import datetime # datetime formatting date = datetime.datetime.now() print("It's now: (:%Y/%m/%d %H:%M:%S)".format(date)) # complex number formatting complexNumber = 1+2j print("Real part: (0.real) and Imaginary part: (0.imag)".format(complexNumber)) # custom __format__() method class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: (:age)".format(Person()))

Output

 It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 

Here,

  • For datetime:
    Current datetime is passed as a positional argument to the format() method.
    And, internally using __format__() method, format() accesses the year, month, day, hour, minutes and seconds.
  • For complex numbers:
    1+2j is internally converted to a ComplexNumber object.
    Then accessing its attributes real and imag, the number is formatted.
  • Overriding __format__():
    Like datetime, you can override your own __format__() method for custom formatting which returns age when accessed as (:age)

Ви також можете використовувати об'єкти __str__()та __repr__()функціональність із використанням скорочених позначень format().

Можливо __format__(), ви можете легко замінити об'єкти __str__()та __repr_()методи.

Приклад 12: __str () __ та __repr () __ скорочення! R та! S із використанням format ()

 # __str__() and __repr__() shorthand !r and !s print("Quotes: (0!r), Without Quotes: (0!s)".format("cat")) # __str__() and __repr__() implementation for class class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: (p!r), str: (p!s)".format(p=Person()))

Вихідні дані

 Цитати: 'cat', Без лапок: cat repr: REPR, str: STR 

Цікаві статті...