特有的字符串格式化函数format——python篇

format 格式化函数

字符串调用方法format,并提供要设置其格式的值。

str.format() 方法通过字符串中的大括号{} 来识别替换字段 ,从而完成字符串的格式化。

字段名:

  • 省略字段名:{}
  • 使用非负十进制整数{0}
  • 变量名{name}

省略字段名

大括号内省略字段名,根据位置参数参数。

  • 替换字段形式: {}

  • 注意:大括号个数可以少于位置参数的个数。

  s = '你好啊{},我叫{}!'.format('小明', '小红')
  print(s)
  
  print('{}你可以吗?不行我来'.format('小黑', '小小鸟'))
  
  """
  你好啊小明,我叫小红!
  小黑你可以吗?不行我来
  """

数字字段名

可以通过数字形式的简单字段名传递位置参数。

  • 数字必须是大于等于 0 的整数。

  • 带数字的替换字段可以重复使用。

  • 数字形式的简单字段名相当于把 format 中的所有位置参数整体当作一个元组,通过字段名中的数字进行取值。即 {0} 等价于 tuple[0],所以大括号内的数字不能越界。

    print('====数字字段名========')
    s = '你好啊{1},我叫{0}!'.format('小明', '小红')
    print(s)
    print('你好啊{0},我叫{1}!'.format('小明', '小红'))
    # 错误写法:相当于下标越界
    # print('{1}'.format('ss'))
    
    """
    你好啊小红,我叫小明!
    你好啊小明,我叫小红!
    """
    

关键字字段名(变量字段名)

使用变量名形式传递关键字参数,字段位置可随意,但需声明关键字。

print('大家好我叫{name},今年{age}岁了'.format(age=20, name='小毛毛'))
print('大家好我叫{name},今年{age}岁了'.format(name='小毛毛', age=20))

"""
大家好我叫小毛毛,今年20岁了
大家好我叫小毛毛,今年20岁了
"""

复合字段名

  • 同时使用了数字和变量名两种形式的字段名就是复合字段名

  • 复合字段名

    支持两种操作符:

    • . 点号
    • [] 中括号

使用. 点号

传递位置参数

  • 替换字段形式:{数字.属性名}
  • 只有一个替换字段的时候可以省略数字
class Person(object):
  def __init__(self,name,age,gender):
    self.name = name
    self.age = age
    self.gender = gender
p = Person('zhangsan',18,'female')
print('姓名是{0.name},年龄是{0.age},性别是{0.gender}'.format(p))
print('姓名是{.name}'.format(p))  # 只有一个替换字段时,可以省略数字

使用[]中括号

  • 用列表传递位置参数

  • 用元组传递位置参数

  • 用字典传递位置参数

  # 使用`[]`中括号
  # 中括号用法:用元组传递位置参数
  food = ('小毛毛', '南瓜')
  print('我叫{0[0]},年龄{1},爱吃{0[1]}。'.format(
      food, 36))
  """
  我叫小毛毛,年龄36,爱吃南瓜。
  """
  
  # 中括号用法:用字典传递位置参数
  dic = dict(name='小毛毛', pid=1001)
  print('我是{[name]}!'.format(
      dic))
  # 多个替换字段,不能省略数字
  print('我是{0[name]},学号{0[pid]}。'.format(
      dic))
  """
  我是小毛毛!
  我是小毛毛,学号1001。
  """

简化format

format格式化一般是在一段字符串后调用,format方法。

简化方法:在字符串前面声明f,既可以不用在写.format后面的语句。例:f'我是{name},今年{age}岁了。

大括号里面一般用变量传值。

name = '毛毛'
age = 20
print(f'我是{name},今年{age}岁了')
print(f'我是{"毛毛"},今年{age}岁了')
"""
我是毛毛,今年20岁了
我是毛毛,今年20岁了
"""

简单字段名的混合使用

  • 混合使用数字形式和变量名形式的字段名,可以同时传递位置参数和关键字参数。
  • 关键字参数必须位于位置参数之后。
  • 混合使用时可以省略数字。
  • 省略字段名 {} 不能和数字形式的字段名 {非负整数} 同时使用。

转换标志

跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,再做进一步的格式设置。

# 转换字段
print('我是{!s}!'.format('小毛毛'))
print('我是{!r}!'.format('小毛毛'))
print('我是{!a}!'.format('小毛毛'))
"""
我是小毛毛!
我是'小毛毛'!
我是'\u5c0f\u6bdb\u6bdb'!
"""

基本转换

类型 含义
b 将整数表示为二进制数
c 将整数解读为Unicode码点
d 将整数视为十进制数进行处理,这是整数默认使用的说明符
e 使用科学表示法来表示小数(用e来表示指数)
E 与e相同,但使用E来表示指数
f 将小数表示为定点数
F 与f相同,但对于特殊值(nan和inf),使用大写表示
g 自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数
G 与g相同,但使用大写来表示指数和特殊值
n 与g相同,但插入随区域而异的数字分隔符
o 将整数表示为八进制数
s 保持字符串的格式不变,这是默认用于字符串的说明符
x 将整数表示为十六进制数并使用小写字母
X 与x相同,但使用大写字母
% 将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%)
# 将小数表示为定点数
print("The number is {num}".format(num=42))
print("The number is {num:f}".format(num=42))
print("The number is {num:F}".format(num=42))
# 将整数转换为二进制数
print("The number is {num:b}".format(num=42))

"""
The number is 42
The number is 42.000000
The number is 42.000000
The number is 101010
"""

数字格式化

数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} +3.14 带符号保留小数点后两位
-1 {:+.2f} -1.00 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为2)
5 {:x<4d} 5xxx 数字补x (填充右边, 宽度为4)
10 {:x<4d} 10xx 数字补x (填充右边, 宽度为4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00e+09 指数记法
13 {:>10d} 13 右对齐 (默认, 宽度为10)
13 {:<10d} 13 左对齐 (宽度为10)
13 {:^10d} 13 中间对齐 (宽度为10)
print('{:.2f}'.format(3.1415926))
print('{:+.2f}'.format(3.1415926))
print('{:+.2f}'.format(-1))
print('{:.0f}'.format(2.71828))
print('{:0>2d}'.format(5))
print('{:x<4d}'.format(5))
print('{:x<4d}'.format(10))
print('{:,}'.format(1000000))
print('{:.2%}'.format(0.25))
print('{:.2e}'.format(1000))
print('{:>10d}'.format(13))
print('{:<10d}'.format(13))
print('{:^10d}'.format(13))

"""
3.14
+3.14
-1.00
3
05
5xxx
10xx
1,000,000
25.00%
1.00e+03
        13
13        
    13  
"""

猜你喜欢

转载自www.cnblogs.com/nongma-reddy/p/13167662.html