软件测试小强测试技术与人生杂谈软件测试

Python基础学习篇-3- 如何使用 各种占位符 和 %方式

2019-03-11  本文已影响2人  测试帮日记

点击链接加入QQ群229390571(免费公开课、视频应有尽有):https://jq.qq.com/?_wv=1027&k=5rbudQa

使用python进行格式化输出时,问题遇到一些小问题,所以彻底做一次大总结。

在python中进行格式化输出有两种方式:

百分号方式、Format方式

说明:

(本文示例使用Python3.6环境)

下文介绍的Format()方式是比较新的函数, 但是目前大多数的 Python 代码仍然使用 % 操作符,所以两种方式都要掌握。Python官网说%这种旧式的格式化最终会从该语言中移除,所以 应该更多的使用 Format()方式。

一、百分号方式

语法格式:

(其中【】内的字段为可选项,其它为必选项)

% [(name)] [flags] [width] .[precision] typecode

(name) 可选,用于选择指定的key

flags 可选,可供选择的值有:

Flags 作用1 作用2

+ 右对齐 正数前加正号,负数前加负号

- 左对齐 正数前无符号,负数前加负号

空格 右对齐 正数前加空格,负数前加负号

0 右对齐 正数前无符号,负数前加负号 用0填充空白处

width 可选,占有宽度

.precision 可选,小数点后保留的位数

typecode 必选,要替换的值类型,可供选择的值有:

typecode 作用

s 获取传入对象的__str__方法的返回值,并将其格式化到指定位置

d 将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置

e 将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)

E 将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)

f 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)

F 同上

o 将整数转换成 八 进制表示,并将其格式化到指定位置

g 自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)

G 作用同上,只是如果是科学计数则是E

c 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111字符,并将字符添加到指定位置

r 获取传入对象的__repr__方法的返回值,并将其格式化到指定位置

% 当字符串中存在格式化标志时,需要用 %%表示一个百分号

注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

百分号方式格式化示例:

>>> print("a = a%+d" %2)

a = a+2

>>> print("a = a%+d" %-2)

a = a-2

>>>

>>>> print("a = a%-d" %2)

a = a2

>>> print("a = a%-d" %-2)

a = a-2

>>>

>>> print("a = a% d" %2)

a = a 2

>>> print("a = a% d" %-2)

a = a-2

>>>

>>> print("a = a%0d" %2)

a = a2

>>> print("a = a%0d" %-2)

a = a-2

>>>

>>>

>>> print("i am %s" %"angle")

i am angle

>>> print("i am %s age %d" %("angle",18))

i am angle age 18

>>> print("i am %(name)s age %(age)d" %{"name":"angle", "age":18})

i am angle age 18

>>>

>>>

>>> print("percent is %.2f"%99.99999)

percent is 100.00

>>> print("percent is %.2f"%99.123999)

percent is 99.12

>>> print("percent is %(aa).2f"%{"aa": 99.15,})

percent is 99.15

>>> print("percent is %(aa).2f %%"%{"aa": 99.17234,})

percent is 99.17 %

>>>

二、Format方式格式化示例

可用于格式化输出,也可单独对数据、字符串进行格式化

1

语法格式:

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

fill 【可选】空白处填充的字符

align 【可选】对齐方式(需配合width使用)

align 作用

< 内容左对齐

> 内容右对齐(默认)

= 内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即:符号+填充物+数字

^ 内容居中

sign 【可选】有无符号数字

align 作用

+ 正号加正,负号加负

- 正号不变,负号加负

空格 正号空格,负号加负

# 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

, 【可选】为数字添加分隔符,如:1,000,000

width 【可选】格式化位所占宽度

.precision 【可选】小数位保留精度

type 【可选】格式化类型

typecode 作用

传入字符串类型的参数时: 

s 格式化字符串类型数据

空白 未指定类型,则默认是None,同s

传整数类型的参数时: 

b 将10进制整数自动转换成2进制表示然后格式化

c 将10进制整数自动转换为其对应的unicode字符

d 十进制整数

o 将10进制整数自动转换成8进制表示然后格式化

x 将10进制整数自动转换成16进制表示然后格式化(小写x)

X 将10进制整数自动转换成16进制表示然后格式化(大写X)

传入“ 浮点型或小数类型 ”的参数: 

e 转换为科学计数法(小写e)表示,然后格式化

E 转换为科学计数法(大写E)表示,然后格式化

f 转换为浮点型(默认小数点后保留6位)表示,然后格式化

F 转换为浮点型(默认小数点后保留6位)表示,然后格式化

g 自动在e和f中切换

G 自动在E和F中切换

% 显示百分比(默认显示小数点后6位)

Format方式格式化示例:

>>>**大括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换**

>>> print("i am {}, age {}, {}".format("yolanda", 18, 'hello'))

i am yolanda, age 18, hello

>

>>> print("i am {}, age {}, {}".format(*["yolanda", 18, 'hello']))

i am yolanda, age 18, hello

>

>>> print("i am {}, age {}, {}".format(*["yolanda", 18]))

Traceback (most recent call last):

File "", line 1, in

IndexError: tuple index out of range

>>>**在大括号中的数字用于指向传入对象在 format() 中的位置**

>>> print("i am {0}, age {1}, name {0}".format(*["yolanda", 18]))

i am yolanda, age 18, name yolanda

>

>>> print("i am {0}, age {1}, name {0}".format("yolanda", 18))

i am yolanda, age 18, name yolanda

>

>>> print("i am {0}, age {1}, name {0}".format(["yolanda", 18]))

Traceback (most recent call last):

File "", line 1, in

IndexError: tuple index out of range

>>>

>>>**如果在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数**

>>> print("i am {name}, age {age}, name {name}".format(name="yolanda", age=18))

i am yolanda, age 18, name yolanda

>

>>> print("i am {name}, age {age}, name {name}".format(*{"name": "yolanda", "age":18}))

Traceback (most recent call last):

File "", line 1, in

KeyError: 'name'

>>> print("i am {name}, age {age}, name {name}".format(**{"name": "yolanda", "age":18}))

i am yolanda, age 18, name yolanda

>>>

>>> print("i am {0[0]}, age {0[1]}, name {0[2]}; you are {1[0]}, age {1[1]}, name {1[2]}".format([1,2,3], [11,22,33]))

i am 1, age 2, name 3; you are 11, age 22, name 33

>>>

>>>

>>> print("i am {:s}, age {:d}, money {:f}".format("yolanda", 18, 9999999.999))

i am yolanda, age 18, money 9999999.999000

>

>>> print("i am {:s}, age {:d}, money {:f}".format(*["yolanda", 18, 9999999.999]))

i am yolanda, age 18, money 9999999.999000

>

>>> print("i am {name:s}, age {age:d}".format(name="yolanda", age=18))

i am yolanda, age 18

>

>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", age:18}))

Traceback (most recent call last):

File "", line 1, in

NameError: name 'age' is not defined

>

>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", "age":18}))

Traceback (most recent call last):

File "", line 1, in

KeyError: 'name'

>

>>> print("i am {name:s}, age {age:d}".format(**{"name":"yolanda", "age":18}))

i am yolanda, age 18

>>>

>>>

>>> print("number: {:b},{:o},{:d},{:x},{:X},{:%}".format(10,10,10,10,10,18.8888,2))

number: 1010,12,10,a,A,1888.880000%

>>>

>>>

>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(10,10,10,10,10,18.8888,2))

number: 1010,12,10,a,A,1000.000000%

>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(8))

number: 1000,10,8,8,8,800.000000%

>>>

>>> print("number: {num:b},{num:o},{num:d},{num:x},{num:X},{num:%}".format(num=6))

number: 110,6,6,6,6,600.000000%

>>>

>>> print ("Name:%10s Age:%8d Height:%8.2f"%("yolanda",25,1.83))

Name:   yolanda Age:      25 Height:    1.83

>>>

>>> print ("Name:%-10s Age:%-8d Height:%-8.2f"%("yolanda",25,1.83))

Name:yolanda    Age:25       Height:1.83

>>>

>>> print ("Name:%-10s Age:%08d Height:%08.2f"%("yolanda",25,1.83))

Name:yolanda    Age:00000025 Height:00001.83

>>>

>#使用format单独对数据进行格式化

>>> format(0.0015,'.2e')

'1.50e-03'

>>>

>>> a = 0.035

>>> b = format(a, '.2%')

>>> b

'3.50%'

>>>

>#其它的格式使用方法类似,不再一一演示

>

上一篇下一篇

猜你喜欢

热点阅读