当前位置 : 主页 > 编程语言 > python >

Python3 字符串的格式化(%与format)

来源:互联网 收集:自由互联 发布时间:2022-09-29
一 介绍 Tips: 1、尽量少使用 + 号进行字符串并接,大量使用会耗费系统资源(大量申请及清理内存) 2、使用%并接时,尽量使用对应的数据类型,以提高代码可读性。 %百分号方式(定

一 介绍

Tips:

1、尽量少使用 + 号进行字符串并接,大量使用会耗费系统资源(大量申请及清理内存)

2、使用%并接时,尽量使用对应的数据类型,以提高代码可读性。


  • %百分号方式(定义与传参都需要使用%进行标识)
  • 定义:%[(name)] [flags] [width] [.precision] type
  • (name):指定字典的key
  • flags:
  • +:右对齐,正数前加正号
  • 空格:右对齐,正数前无符号
  • 0:右对齐,正数前加0
  • -:左对齐
  • width:占用宽度
  • .percision:字符串或浮点数保留多少位
  • type:(必须参数)
  • s:传入的值为字符类型
  • d:传入的值为整数类型
  • f:传入的值为浮点数
  • %%:输出百分号字符
  • 等等
  • format 方式
  • 来源:​​https://docs.python.org/3/library/string.html#format-string-syntax​​
  • 定义:{ [field_name] [ !conversion] [ :format_spec] }
  • field_name

class Person:
name = ''
age = 22

def __init__(self, n):
self.name = n

el = Person('elsa')
ka = Person('kate')

print("I am {0.name}, my friend is {1.name}".format(el, ka)) # I am elsa, my friend is kateprint("I am {friend[0]}, my friend is {friend[1]}".format(friend=['elsa', 'kate']))
# I am elsa, my friend is kate

  • conversion:r | s | a
  • r:Calls repr() on the argument first。将变量的值转换为str的定义格式。
s = '{name!r}'.format(name='elsa')
print(s) # 'elsa'

a = eval(a) # elsa
  • s:Calls str() on the argument first。将变量转为字符串。

s = '{name!s}'.format(name=1234)
print(s, type(s)) # 1234 <class 'str'>

  • a:Calls ascii() on the argument first。
  • format_spec:[ [ fill ] align ] [sign] [#] [0] [width] [grouping_option] [.precision] [type]
  • fill:空白处填充字符
  • align:对齐方式
  • <:内容向左对齐
  • >:内容向右对齐
  • =:对数字右对齐(符号+填充字符+数字)
  • ^:内容居中
  • sign:数值的符号显示。(+ | - | 空格)
  • +:显示所有正负符号
  • -:只显示负数符号
  • 空格:显示所有正负符号,但正号被空格取代。可以理解为正常显示的方式。
  • #:对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
  • 0:
  • width:占用宽度
  • grouping_option:
  • ,| _:对数字的千分位分隔符

print("{:,}".format(123456.78))
# 123,456.78

print("{:_}".format(123456.78))
# 123_456.78

  • precision:小数点保留位数
  • type:格式化类型(与传入参数的数据类型匹配)
  • s:字符串
  • 无:默认字符串
  • d:整数
  • f:浮点
  • %:自动计算,并输出百分号
  • 等等


二 %百分号 常用方式


  • 顺序对应模式(定义的顺序要与参数一致)

name = 'elsa li'
age = 18
money = 98765.987654

meg = 'I am %s ' % name
print(meg)
# I am elsa li

meg = 'I am %.4s , age is %d ,money is %015.2f' % (name, age, money)
print(meg)
# I am elsa , age is 18 ,money is 000000098765.99

Python3 字符串的格式化(%与format)_Python3

  • 字典模式

person = {'name': 'elsa li', 'age': 18, 'money': 98765.987654}

meg = 'I am %(name)s ' % person
print(meg)
# I am elsa li

meg = 'I am %(name).4s , age is %(age)d ,money is %(money) 15.2f' % person
print(meg)
# I am elsa , age is 18 ,money is 98765.9877

  • 添加颜色

name = 'elsa'
percent = 80.8867
meg = 'I am \033[45;3m%s\033[0m ,%.2f%% of work complated' %(name,percent)
# \033[45;3m 定义背景颜色的开始位置,45为颜标,3为字体的粗细度。
# \033[0m 定义颜色的结束位置
# 颜色详细的使用,可以参考 linux ps1(命令行提示符)的颜色内容

print(meg)
print('root','x','0','0',sep=':')

meg = ['root', 'x', 0, 0]
print(*meg, sep=':')

输出:

I am elsa ,80.89% of work complated

root:x:0:0


三 format 常用方式

Python3 字符串的格式化(%与format)_Python3_02

  • 常规方式
name='elsa'
age=18
money=12345.678
meg='I am {},age is {!s}, money is {:0>-10,.2f}'.format(name,age,money)
print(meg) # I am elsa,age is 18, money is 012,345.68name = 'elsa'
age = 18
money = 12345.678
meg = 'I am {0},age is {2}, money is {1}'.format(name, age, money)
print(meg) # I am elsa,age is 12345.678, money is 18meg = 'I am {0[1]},age is {1}, money is {2}'.format(*[['elsa', 'li'], 18, 12345.678])
print(meg) # I am li,age is 18, money is 12345.678meg = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 1, 2, 3)
print(meg) # numbers: 1111,17,15,f,F, 1587.623000%
  • 字典方式
meg = 'I am {name},age is {age}, money is {money}'.format(name = 'elsa', age = 18, money=12345.678)
print(meg) # I am elsa,age is 18, money is 12345.678me = {'name': ['elsa','li'] ,
'age': 18,
'money': '12345.678'}
meg = 'I am {name[1]},age is {age}, money is {money}'.format(**me)
print(meg) # I am li,age is 18, money is 12345.678


四 format 与 % 的参数格式汇总


%

format

%

format

普通格式定义

%

{}


无下标则按顺序,有下标则按索引

字典格式定义

%(字段)

{字段}



普通方式

'%s %d' %( 'elsa',20 )

'{1} {0}'.format( 'elsa',20 )

赋值方式

×


'{name} {age}'.format( name='elsa',age=20 )

列表方式

×


‘{} {}'.format( *['elsa',20] )

'{1} {0}'.format( *['elsa',20] )

字典方法

'%(name)s %(age)d' %{'name':'elsa','age':18}

'{name} {age}'.format( **{'name':'elsa','age':20} )

下标方式

×


'{0[0]} {1[1]}'.format( ['elsa','tony'],[20,25] )


网友评论