【python学习笔记】字符串的格式化

字符串格式化

含义:格式化字符串,就是按照统一的规格去输出一个字符串
种类:Python的字符串格式化有两种方式: 百分号方式、format方式
现状:百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存

1.format()

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

① fill (可选) 空白处填充的字符
② align (可选) 对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^,内容居中
③ sign (可选) 有无符号数字
+,正号加正,负号加负;
-,正号不变,负号加负;
空格 ,正号空格,负号加负;
④ # (可选) 对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
⑤ , (可选) 为数字添加分隔符,如:1,000,000
⑥ width(可选) 格式化位所占宽度
⑦ .precision(可选) 小数位保留精度
⑧ type(可选) 格式化类型
~传入"字符串类型 "的参数
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()方法接受位置参数和关键字参数,二者都传递给一个叫作replacement字段,这个字段在字符串内由大括号表示

举例:

>>> '{0} love {1}.{2}'.format("I","love","python")
'I love love.python'

{0},{1},{2},那么format()的三个参数就叫做关键字参数

>>> '{a} love {b}.{c}'.format(a="I",b="love",c="python")
'I love love.python'
>>> 

a,b,c相当于三个标签,format()将参数中等值的字符串替换进去,这就是关键字参数

另外,关键字参数和位置参数可以一起使用

>>> '{0} love {b}.{c}'.format("I",b="love",c="python")
'I love love.python'
>>> 

注意的是,若将位置参数和关键字参数一起使用时,位置参数必须在关键字参数之前,否则会出错:

>>> '{a} love {b}.{0}'.format("I",b="love","python")
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> '{a} love {b}.{2}'.format("I",b="love","python")
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> 

如果要将大括号打印出的,直接在大括号外面再加大括号(要打印转义符"\",只需要用转义符转移本身就可以)

>>> '{{0}}'.format("不打印")
'{0}'

注意位置参数没有被打印,但是这并不会产生错误

>>> "{0}:{1:.2f}".format("圆周率",3.14159)
'圆周率:3.14'
>>> 

在替换域中,冒号表示格式化符号的开始,"2"的意思是四舍五入到保留两位小数点,f的意思是浮点数,所以打印出来的是3.14

多多练习:

#1
print('i am {},age {},{}'.format('seven',18,'alex'))
#2
print('i am {},age {},{}'.format(*['seven',18,'alex']))
#3
print('i am {0},age {1},really {0}'.format('seven',18))
#4
print('i am {0},age {1},really {0}'.format(*['seven',18]))
#5
print('i am {name},age {age},really {name}'.format(name='seven',age=18))
#6
print('i am {name},age {age},really {name}'.format(**{'name':'seven','age':18}))
#7
print('i am {0[0]},age {0[1]},really {0[2]}'.format([1,2,3],[11,22,33]))
#8
print('i am {:s},age {:d},really {:f}'.format('seven',18,8888.1))
#9
print('i am {:s},age {:d}'.format(*['seven',18]))
#10
print('i am {name:s},age {age:d}'.format(name='seven',age=18))
#11
print('i am {name:s},age {age:d}'.format(**{'name':'seven','age':18}))
#12
print('numbers: {:b},{:o},{:d},{:x},{:X}, {:%}'.format(15, 15, 15, 15, 15, 15.87623, 2))
#13
print('numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}'.format(15))
#14
print("numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15))

2.格式化操作符:%

格式:%[(name)][flags][width].[precision]typecode

① (name)(可选),用于选择指定的key
② flags(可选),可供选择的值有:

    +右对齐;正数前加正好,负数前加负号;
    -左对齐;正数前无符号,负数前加负号;
    空格 右对齐;正数前加空格,负数前加负号;

    0   右对齐;正数前无符号,负数前加负号;用0填充空白处
③ width(可选),占有宽度
④ precision(可选),小数点后保留的位数
⑤ typecode(必选)

    s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
    r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
    c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
    o,将整数转换成 八  进制表示,并将其格式化到指定位置
    x,将整数转换成十六进制表示,并将其格式化到指定位置
    d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
    e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
    E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
    f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
    F,同上
    g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
    G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
    %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

常用的%格式化操作符


举例:

>>> '%c' % 97
'a'
>>> '%c%c%c%c%c' % (72,82,90,105,80)
'HRZiP'
>>> 
>>> "%d转换为八进制是: %o" % (123,123)
'123转换为八进制是: 173'
>>> 
>>> '%f科学计数法表示: %e' % (1495000000,1495000000)
'1495000000.000000科学计数法表示: 1.495000e+09'
>>> 

格式化操作符的辅助命令举例:

>>> '%5.1f' % 27.987
' 28.0'
>>> '%.2e' % (27.987)
'2.80e+01'
>>> '%10d' % 5
'         5'
>>> '%-10d' % 5
'5         '
>>> '%010d' % 5
'0000000005'
>>> '%#X' % 1
'0X1'
>>> '%#X' % 100
'0X64'
>>> 

多多练习:

#1
print('i am %s' % "alex")
#2
print('i am %.2f' % 3.1415926)
#3
print('i am %s age %d' % ('alex',18))
#4
print('i am %s age %s' % ('alex',18))
#5
print('i am %s age %s' % ('alex',[1,2,3]))
#6
print('i am %(name)s age %(age)d' % {'name':'alex','age':18})
#7
print('i am %(pp).2f' % {'pp':123.42556})
#8
print('i am %.2f %%' % 99.56789)
#8
print('i am %(pp).2f %%' % {'pp':123.42556})

3.python转义符及其含义


作业题:

1.请问以下这行代码会打印什么内容? 

   "{{1}}".format("不打印", "打印")

结果为‘{1}’,特殊功能被大括号给剥夺,位置参数没有被输出,但是不会报错

2.如果想想显示Pi = 3.14,format前面的字符串要怎么填写?

>>> "{0}:{1:.2f}".format("Pi",3.14159)
'Pi:3.14'
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值