本文基于Python 2.7

Python格式化字符串有三种方式: str.format()函数,两个反引号 ``,%

str.format()

官方文档: [传送门] 1

格式化字符串被包含在花括弧{}中,可叫做"替换域",不包含在花括弧里的内容将被原样输出到标准输出.如果想要输出{},可以用{% raw %} {{}} {% endraw %}的方式.

在这里我们定义几个名词,如下面的列子所示:

  • 替换域:This is curly braces {{}}
  • 填充域:format(),括弧()中的内容为填充域
  • field_name: 花括弧{}中的内容为field_name
##字符串格式化输入示例
>>> print ("This is curly braces {{}}".format())
This is curly braces {}

替换域的语法如下:

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s"
format_spec       ::=  <described in the next section>

一个不太正式的术语中,replacement_field以一个将被格式化并插入标准输出的field_name(字段名)开始. 如果使用了conversion(转换符) "!"或者指定了以冒号":"指定的format_spec,field_name就为可选项.

field_name可以是一个数字或者关键字.如果是数字,将引用一个位置参数,如果是一个关键字,将引用命名关键字参数.如果数字参数是按0,1,2,3……这样的顺序排列,则这个参数可以忽略掉,并且程序会按顺序将填充域的内容参入到替换域.field_name也支持arg_name.attribute_name(属性名)和elemnt_index的方式, .attribute_name这样的表达式其实就是用getattr()这个函数获取的,[elemnt_index]表达式就是用__getitem__()函数获取对应的值.

在Python2.7中,{0}{1}等同于{}{}

以下是几个实例:

>>> print("my name is: {0},i am {1} years old".format('QiangDong.Liu','18'))
my name is: QiangDong.Liu,i am 18 years old
>>> print("{1},{0},{1}".format('police',110))
110,police,110
>>> print("{name},{job}".format(name="HuaTeng,Ma",job="Tencent CEO"))
HuaTeng,Ma,Tencent CEO
>>> class Person:  
    def __init__(self,name,age):  
        self.name,self.age = name,age  
        def __str__(self):  
            return 'This guy is {self.name},is {self.age} old'.format(self=self) 
>>>str(Person('kzc',18))
'This guy is kzc,is 18 old'
>>> l = ['police',110]
>>> '{0[1]},{0[0]}'.format(l)
'110,police'

还有两个转换标识!s,!r来设定具体通过str()还是repr()方法来显示.

"Harold's a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first