Python中文社区python3呆鸟的Python数据分析

【Python扫盲】字符串格式化

2020-05-06  本文已影响0人  nanarino

字符串格式化

Python的字符串格式化有两种方式

事实上,格式化借助的是对象的魔术方法。

实现了__format__的对象才适用于format方式格式化输出,

实现了__str____repe__的对象才分别适用于格式符%s%r输出。

%格式符

一般格式为 %(name) + format_spec

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

name

可选,用于选择指定的key

>>> "%(name)s——%(age)d"%{'name':'宝钟玛琳','age':17}
'宝钟玛琳——17'

s 和 d 属于 [type]

format_spec规则的常用组分:

sign

可选,数字和字符串可供选择的值有:

width

可选,占有宽度

>>> "%(name)+7s——%(age)-5d"%{'name':'宝钟玛琳','age':17}
'   宝钟玛琳——17   '

.precision

可选,小数点后保留的位数 默认6位

type

类型,必选

任意对象:

字符串和整数:

数字:

>>> '——%(p).2f'%{'p':0.1+0.2}
'——0.30'
>>> '——%(p).2g'%{'p':0.1+0.2}
'——0.3'

终端字体颜色

"""
#格式:
  设置颜色开始 :\033[显示方式;前景色;背景色m
  
#说明:
前景色            背景色           颜色
---------------------------------------
30                40              黑色
31                41              红色
32                42              绿色
33                43              黃色
34                44              蓝色
35                45              紫红色
36                46              青蓝色
37                47              白色

显示方式           意义
-------------------------
0                终端默认设置
1                高亮显示
4                使用下划线
5                闪烁
7                反白显示
8                不可见
"""

#例子:
\033[1;31;40m    #1-高亮显示 31-前景色红色  40-背景色黑色
\033[0m          #采用终端默认设置,即取消颜色设置

可以使用第三方模块termcolor来简化语句:

from termcolor import colored

print(colored("helloworld", "red"))

第三方模块在使用前需要用pip安装

系统支持

Windows7及以下无法解析颜色代码
使用termcolor模块也无效
可以使用第三方模块colorama来显示颜色

colorama模块兼容更好:

from colorama import  init, Fore

init(autoreset=False) #给True的时候print时无需+Fore.RESET
print(Fore.RED + "helloworld" + Fore.RESET)

内置函数format()

内置函数format(value[, format_spec])

第二个参数即format_spec格式规格迷你语言

实现了魔术方法__format__的对象都可以使用

以数字对象的格式化为例:

>>> format(12,'+.3f') #保留3位小数
'+12.000'
>>> format(3,'b') #二进制转化
'11'

其他实现了魔术方法__format__的对象,这里以datetime.time对象为例:

>>> night = datetime.time(22,30,tzinfo=datetime.timezone(
...     datetime.timedelta(hours=8), name = '北京'))
>>> format(night,'现在是%Z时间%H点%M分')
'现在是北京时间22点30分'

str.format()

' {}  {}  {} '.format(a,b,c)     
' {0}  {1}  {2} '.format(a,b,c)
' {0}  {1}  {2} '.format(*[a,b,c])
' {a}  {b}  {c} '.format(a=a,b=b,c=c)
' {a}  {b}  {c} '.format(**{"a":a,"b":b,"c":c})

{!s}是默认的

'{!s}、{!a}、{!r}' #分别表示str、ascii和repr方法。

实现了魔术方法__format__的对象可以使用冒号 : format_spec

>>> '0x{:x}'.format(255)
'0xff'

datetime.time对象为例的其他实现了魔术方法__format__的对象:

>>> '现在是{:%Z}时间{:%H}点{:%M}分'.format(night,night,night)
'现在是北京时间22点30分'

f字符串

在python3.6以上,str.format()可以直接使用f字符串的写法

f'{a}{b}{c}'即可代替'{a}{b}{c}'.format(a=a,b=b,c=c)

f字符串中不允许使用\转义字符。

datetime.time对象为例的其他实现了魔术方法__format__的对象:

>>> f'现在是{night:%Z}时间{night:%H}点{night:%M}分'
'现在是北京时间22点30分'

在python3.8以上

f字符串中可以直接使用说明符=调试,

>>> python = 3.8    
>>> f"{python=}"    
'python=3.8'

内置函数str()repr()

str()不止是构造函数(class)实例化一个str对象,

str(o)它也是对参数对象进行魔术方法的调用:o.__str__(),将参数转换为了str对象

无论是print(o)f'{o}', "%s"%o,它们都是对魔术方法 o.__str__()的调用


repr(o)f'{o!r}', "%r"%o则是对魔术方法 o.__repr__()的调用,

它会以字面量的形式呈现对象,即字符串带有引号,列表变成'['+ repr(成员) + ',]'

f字符串f'{o=}'就相当于f'o={repr(o)}'

上一篇 下一篇

猜你喜欢

热点阅读