python小知识——format函数的使用方法

参考

  1. 官方文档
  2. python中format用法

format参数格式

'{[index][ : [fill] align][sign][#][width][.precision][type]} {……}{……} '.format()
以上参数的意义是:
注意,格式中的[ ]内的参数都是可选参数,可以使用也可以不使用

  • index:指定冒号**:**后面出现的参数在format()中的索引值,如果没有,则以format()中的默认顺序自动分配
  • fill:指定空白处的填充符。
  • align:指定数字的对齐方式:

Format examples

This section contains examples of the str.format() syntax and comparison with the old %-formatting.

In most of the cases the syntax is similar to the old %-formatting, with the addition of the {} and with : used instead of %. For example, '%03.2f' can be translated to '{:03.2f}'.

The new format syntax also supports new and different options, shown in the following examples.

翻译:

本节包含str.format()语法示例以及与旧%格式的比较。

在大多数情况下,语法类似于旧的%- 格式,只是添加了{} 并用: 代替%. 例如,'%03.2f'可以翻译成'{:03.2f}'.

新格式语法还支持新的不同选项,如以下示例所示。

  1. Accessing arguments by position:按位置访问参数
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'
  1. Accessing arguments by name: 按名称访问参数
>>> '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'
  1. Accessing arguments’ attributes:访问参数的属性
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
  1. Accessing arguments’ items:访问参数的项目
>>> coord = (3, 5)
>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
'X: 3;  Y: 5'
  1. Replacing %s and %r:替换%s%r
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
  1. Aligning the text and specifying a width:对齐文本并指定宽度
>>> '{:<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***********'
  1. Replacing %+f, %-f, and % f and specifying a sign:

替换%+f%-f% f并指定一个符号

>>> '{:+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'
  1. Replacing %x and %o and converting the value to different bases:

替换%x%o并将值转换为不同的基数

>>> # 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'
  1. Using the comma as a thousands separator:

使用逗号作为千位分隔符

>>> '{:,}'.format(1234567890)
'1,234,567,890'
  1. Expressing a percentage:

表示百分比

>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
  1. Using type-specific formatting:

使用特定于类型的格式

>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
  1. Nesting arguments and more complex examples:

嵌套参数和更复杂的示例

>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12): 
...     for base in 'dXob':
...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
...     print()
...
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8     8    10  1000
    9     9    11  1001
   10     A    12  1010
   11     B    13  1011
  1. 通过key来填充
obj = 'world'
name = 'python'
print('hello, {obj} ,i am {name}'.format(obj = obj,name = name))

# 输入结果:hello, world ,i am python
  1. 通过列表填充
obj = 'world'
name = 'python'
print('hello, {obj} ,i am {name}'.format(obj = obj,name = name))

# 输入结果:hello, world ,i am python
  1. 通过列表填充
list=['world','python']
print('hello {names[0]}  i am {names[1]}'.format(names=list))# 输出结果:hello world  i am python
print('hello {0[0]}  i am {0[1]}'.format(list)) #输出结果:hello world  i am python
  1. 通过字典填充
dict={‘obj’:’world’,’name’:’python’} 
print(‘hello {names[obj]} i am {names[name]}’.format(names=dict)) 
结果hello world i am python 
  1. 通过类的属性填充
class Names():
    obj='world'
    name='python'
print('hello {names.obj} i am {names.name}'.format(names=Names))
#输入结果hello world i am python
  1. 使用魔法参数
args = [‘,’,’inx’] 
kwargs = {‘obj’: ‘world’, ‘name’: ‘python’} 
print(‘hello {obj} {} i am {name}’.format(*args, **kwargs))#输入结果:hello world , i am python

注意:魔法参数跟你函数中使用的性质是一样的:这里format(*args, **kwargs)) 等价于:format(‘,’,’inx’,obj = ‘world’,name = ‘python’)

%r或者{!r}在python中的意思

都是python的转译字符, 类似于%r, %d,%f
简单的例子

>>> a = '123'
>>> b = 'hello, {!r}'.format(a)
>>> b
"hello, '123'"

例子用的是format,跟直接%效果类似,注意结果中包含的是字符串原意。

例子二

>>> a = '123'
>>> b = 'hello, %r' % a
>>> b
"hello, '123'"

这对一部分的对象还是很有用的。r直接反应对象本体。

比如说,

>>> b = 'hello, %r' % 123
>>> b
'hello, 123'

123的本体就是123。

还看下面的这个例子

>>> b = 'hello, !r' % '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>>

符号,这个只在fromat中有用,要注意方法。但是效果类似

>>> b = 'hello, %r' % '123'
>>> b
 "hello, '123'"
>>> b = 'hello, {!r}'.format( '123')
>>> b
 "hello, '123'"

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/125894951