天天看点

Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

@[toc](Python String format())

语法

format()方法的语法为:

其中p0,p1,…是位置参数,而k0,k1…是关键参数,有着v0,v1…得值

而且,template是混合了格式代码和参数占位符的代码。

String format()参数

format()方法接受任意数量的参数。但是,又分为两类参数:

  • 位置参数-可以使用大括号{index}内的参数索引访问的参数列表
  • 关键字参数——key=value类型的参数列表,可以使用大括号{key}内的key of parameter访问

String format()如何工作

Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

注意:参数列表从0开始。浮点数四舍五入。

使用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))
           

注意:在混合参数的情况下,关键字参数必须始终跟随位置参数

数字格式类型

  • d Decimal integer 十进制
  • c Corresponding Unicode character 对应Unicode自u发
  • b Binary format 二进制格式
  • o Octal format 八进制
  • x Hexadecimal format (lower case) 十六进制
  • X Hexadecimal format (upper case) 十六进制
  • n Same as ‘d’. Except it uses current locale setting for number separator
  • e Exponential notation. (lowercase e) 指数
  • E Exponential notation (uppercase E) 指数
  • f Displays fixed point number (Default: 6) 显示固定小数位数(默认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. 除了转化为E
  • % Percentage. Multiples by 100 and puts % at the end. 百分比

例子2:

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

例子3:数字格式与填充的整数和浮点数

# 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))
           
Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

例子4:带符号数字的数字格式

# 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))
+12.230000 -12.230000
12.230000 -12.230000
 12.230000 -12.230000
           

带对齐的数字格式化

操作符<、^、>和=用于在为数字分配一定宽度时进行对齐。

< 左对齐

^ 居中对齐

> 右对齐

= 使符号打到最左端。

# 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))
           
Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

例子6:带填充和对齐的字符串格式

# 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"))
           
Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

例子7:使用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"))
           
Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

例子8:使用format()格式化类成员

# define Person class
class Person:
    age = 23
    name = "Adam"

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

例子9:使用format()格式化字典成员

# define Person dictionary
person = {'age': 23, 'name': 'Adam'}

# format age
print("{p[name]}'s age is: {p[age]}".format(p=person))
           

另一方法:

# define Person dictionary
person = {'age': 23, 'name': 'Adam'}

# format age
print("{name}'s age is: {age}".format(**person))
           

**是一个格式参数(最小字段宽度)。

示例10:使用format()动态格式化

# dynamic string format template
string = "{:{fill}{align}{width}}"

# passing format codes as arguments
print(string.format('cat', fill='*', align='^', width=5))

# dynamic float format template
num = "{:{align}{width}.{precision}f}"

# passing format codes as arguments
print(num.format(123.236, align='<', width=8, precision=2))
           
Python String format()语法String format()参数String format()如何工作使用format()进行基本格式化

使用format()的额外格式化选项

format()还支持特定于类型的格式化选项,比如datetime和复数格式。

format()在内部为datetime调用_format__(),而format()访问复数的属性。

您可以轻松地重写任何对象的_format__()方法来进行自定义格式化。

示例11:使用format()和覆盖_format__()方法实现特定于类型的格式化

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()))
           

覆盖__format__ ():

与datetime类似,您可以覆盖您自己的用于自定义格式的_format__()方法,该方法在以{:age}访问时返回年龄。

例子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()))
Quotes: 'cat', Without Quotes: cat
repr: REPR, str: STR