Python中format的用法

这篇文章讲的比较全面

自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?

语法

它通过{}和:来代替%。
“映射”示例

通过位置



字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
通过关键字



通过对象属性



通过下标



有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。
格式限定符



它有着丰富的的“格式限定符”(语法是{}中带:号),比如:

填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
比如

精度与类型f
精度常跟类型f一起使用

其中.2表示长度为2的精度,f表示float类型。

其他类型



主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。

用,号还能用来做金额的千位分隔符。

format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点。

1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型

2.单个参数可以多次输出,参数顺序可以不相同

3.填充方式十分灵活,对齐方式十分强大

4.官方推荐用的方式,%方式将会在后面的版本被淘汰

format的一个例子

1

print ‘hello {0}‘.format(‘world‘)

会输出hello world

format的格式

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” | “a”

format_spec            ::=      <described in the next section>


format_spec 的格式

format_spec   ::=    [[fill]align][sign][#][0][width][,][.precision][type]

fill             ::=    <any character>

align           ::=    ”<” | “>” | “=” | “^”

sign            ::=    ”+” | “-” | ” “

width           ::=    integer

precision       ::=    integer

type            ::=    ”b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | “%”

应用:

一 填充

1.通过位置来填充字符串

1

2

3

print ‘hello {0} i am {1}‘.format(‘Kevin‘,‘Tom‘)                  # hello Kevin i am Tom

print ‘hello {} i am {}‘.format(‘Kevin‘,‘Tom‘)                    # hello Kevin i am Tom

print ‘hello {0} i am {1} . my name is {0}‘.format(‘Kevin‘,‘Tom‘) # hello Kevin i am Tom . my name is Kevin

foramt会把参数按位置顺序来填充到字符串中,第一个参数是0,然后1 ……

也可以不输入数字,这样也会按顺序来填充

同一个参数可以填充多次,这个是format比%先进的地方

2.通过key来填充

1

print ‘hello {name1}  i am {name2}‘.format(name1=‘Kevin‘,name2=‘Tom‘)                  # hello Kevin i am Tom

3.通过下标填充

1

2

3

names=[‘Kevin‘,‘Tom‘]

print ‘hello {names[0]}  i am {names[1]}‘.format(names=names)                  # hello Kevin i am Tom

print ‘hello {0[0]}  i am {0[1]}‘.format(names)                                # hello Kevin i am Tom

4.通过字典的key

1

2

names={‘name‘:‘Kevin‘,‘name2‘:‘Tom‘}

print ‘hello {names[name]}  i am {names[name2]}‘.format(names=names)                  # hello Kevin i am Tom

注意访问字典的key,不用引号的

5.通过对象的属性

1

2

3

4

5

class Names():

name1=‘Kevin‘

name2=‘Tom‘

print ‘hello {names.name1}  i am {names.name2}‘.format(names=Names)                  # hello Kevin i am Tom

6.使用魔法参数

1

2

3

args=[‘lu‘]

kwargs = {‘name1‘: ‘Kevin‘, ‘name2‘: ‘Tom‘}

print ‘hello {name1} {} i am {name2}‘.format(*args, **kwargs)  # hello Kevin i am Tom

二 格式转换

b、d、o、x分别是二进制、十进制、八进制、十六进制。

数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} 3.14 带符号保留小数点后两位
-1 {:+.2f} -1 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00E+09 指数记法
25 {0:b} 11001 转换成二进制
25 {0:d} 25 转换成十进制
25 {0:o} 31 转换成八进制
25 {0:x} 19 转换成十六进制

三 对齐与填充

数字 格式 输出 描述
5 {:0>2} 05 数字补零 (填充左边, 宽度为2)
5 {:x<4} 5xxx 数字补x (填充右边, 宽度为4)
10 {:x^4} x10x 数字补x (填充右边, 宽度为4)
13 {:10}         13 右对齐 (默认, 宽度为10)
13 {:<10} 13 左对齐 (宽度为10)
13 {:^10}     13 中间对齐 (宽度为10)

四 其他

1.转义{和}符号

1

print ‘{{ hello {0} }}‘.format(‘Kevin‘)

跟%中%%转义%一样,formate中用两个大括号来转义

2.format作为函数

1

2

f = ‘hello {0} i am {1}‘.format

print f(‘Kevin‘,‘Tom‘)

3.格式化datetime

1

2

now=datetime.now()

print ‘{:%Y-%m-%d %X}‘.format(now)

4.{}内嵌{}

1

print ‘hello {0:>{1}} ‘.format(‘Kevin‘,50)

5.叹号的用法

!后面可以加s r a 分别对应str() repr() ascii()

作用是在填充前先用对应的函数来处理参数

1

2

print "{!s}".format(‘2‘)  # 2

print "{!r}".format(‘2‘)   # ‘2‘

差别就是repr带有引号,str()是面向用户的,目的是可读性,repr()是面向Python解析器的,返回值表示在python内部的含义

ascii()一直报错,可能这个是3.0才有的函数

参考:https://docs.python.org/3/library/string.html#grammar-token-conversion

时间: 2024-10-05 04:58:55

Python中format的用法的相关文章

python中enumerate()的用法

先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输出, 2.将 list 倒序成 [6, 5, 4, 3, 2, 1] 3.将a 中的偶数挑出 *2 ,结果为 [4, 8, 12] 这个例子用到了python中enumerate的用法.顺便说一下enumerate在for循环中得到计数的用法,enumerate参数为可遍历的变量,如 字符串,列表等: 返回值为enumerate类. 示例代码如

Python中range的用法

Python中range的用法 函数原型:range(start, end, scan): 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range(0, 5); end:技术到end结束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 scan:每次跳跃的间距,默认为1.例如:range(0, 5) 等价于 range(0, 5, 1)

python中MySQLdb模块用法实例

篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作. python连接mysql的方案有oursql.PyMyS

Python中assert的用法

Python中assert的用法 Python中assert用来判断语句的真假,如果为假的话将触发AssertionError错误 如: >>> a = 23 >>> a 23 >>> assert a == 23 >>> a -=1 >>> a 22 >>> assert a == 23 Traceback (most recent call last):   File "",

python 中 print 函数用法总结

Python 思想: “一切都是对象!” 在 Python 3 中接触的第一个很大的差异就是缩进是作为语法的一部分,这和C++等其他语言确实很不一样,所以要小心 ,其中python3和python2中print的用法有很多不同,python3中需要使用括号 缩进要使用4个空格(这不是必须的,但你最好这么做),缩进表示一个代码块的开始,非缩进表示一个代码的结束.没有明确的大括号.中括号.或者关键字.这意味着空白很重要,而且必须要是一致的.第一个没有缩进的行标记了代码块,意思是指函数,if 语句.

python中format函数用于字符串的格式化

python中format函数用于字符串的格式化 通过关键字 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 grade = {'name' : '陈某某', 'fenshu': '59'} print('{name}电工考了{fenshu}'.format(**grade))#通过关键字,可用字典当关键字传入值时,在字典前加**即可 通过位置 print('{1}今天{0}'.format('拍视频','陈某某'))#通过位置 print

Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: &#39;self&#39;的问题解决

https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. https://blog.csdn.net/CLHugh/article/details/75000104, Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决 原文

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和&#39;$nin&#39; || python @property的含义

一.单星号 * 采用 * 可将列表或元祖中的元素直接取出,作为随机数的上下限: import random a = [1,4] print(random.randrange(*a)) 或者for循环输出: import random a = [1,4] for i in range(*a): print(i) ''' result : 1 2 3 ''' 二.双星号 ** 双星号 ** 可将字典里的“值”取出,如下例 class Proxy(object): def __init__(self,

python中enumerate函数用法

在Python中,我们习惯这样遍历: for item in sequence:    print(item) 这样遍历取不到item的序号i,所有就有了下面的遍历方法: for index in range(len(sequence)):    print(sequence[index]) 其实,如果你了解内置的enumerate函数,还可以这样写: for index, item in enumerate(sequence):    print(index, item)