Python之精准学习☞格式化输出

今天我们谈谈格式化输出的那些鲜为人知的故事…

一、精准之format()函数

历史 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能

模板方式为: '{被格式化内容的索引:格式化形式选择}'.format(被格式化内容)

此部分局部示例引自菜鸟教程(万分感谢!)

  • 热身部分(不设置参数,直接指定索引)

    • 示例1

      >>> "{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
      'hello world'
      
      >>> "{0} {1}".format("hello", "world")  # 设置指定位置
      'hello world'
      
      >>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
      'world hello world'
    • 示例2

      print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
      
      # 通过字典设置参数
      
      site = {"name": "菜鸟教程", "url": "www.runoob.com"}
      print("网站名:{name}, 地址 {url}".format(**site))
      
      # 通过列表索引设置参数
      
      my_list = ['菜鸟教程', 'www.runoob.com']
      print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的
      
       依次输出为:
          网站名:菜鸟教程, 地址 www.runoob.com
          网站名:菜鸟教程, 地址 www.runoob.com
          网站名:菜鸟教程, 地址 www.runoob.com
    • 示例3

      也可以向 str.format() 传入对象:
      class AssignValue(object):
          def __init__(self, value):
              self.value = value
      my_value = AssignValue(6)
      print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
      
          输出结果为:
               value 为: 6
输入 格式 输出 描述
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)
11
'{:b}'.format(11)
'{:d}'.format(11)
'{:o}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)
1011
11
13
b
0xb
0XB
进制
  • ^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
  • +表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
  • b、d、o、x 分别是二进制、十进制、八进制、十六进制
  • 此外我们可以使用大括号 {} 来转义大括号,如下实例:
  • 代码:       print (“{} 对应的位置是 {{0}}”.format(“runoob”))
  • 输出为>>>        runoob 对应的位置是 {0}

二、精准之百分号格式化

百分号格式化部分引自zzwwsun的博客(此处表示万分感谢!)
https://blog.csdn.net/weixin_41064957/article/details/78725004

    运算符:
        %

    格式:
        格式化字符串%参数值
        或
        格式化字符串%(参数值1,参数值2,...)

    示例:
        fmt = '姓名:%s, 年龄:%d'
        name = '张飞'
        age = 20
        print(fmt % (name, age))

格式化字符串中的占位符和类型码

    占位符类型码                  意义
        %s                  字符串
        %r                  字符串,使用repr,而不是str

        %c                  整数转为单个字符
        >>> "%c" %20013     #返回值:'中',类似于chr(20013)

        %d                  十进制整数
            >>> "%d" %10        #返回值:'10'
        %o                  八进制整数
            >>> "%o" %10        #返回值:'12'
        %x                  十六进制整数(字符a-F小写)
            >>> "%x" %10        #返回值:'a'
        %X                  十六进制整数(字符A-F大写)
            >>> "%X" %10        #返回值:'A'

        %e                  指数型浮点数(e小写),如2.9e+10
            >>> "%e" %29979000000.0    #返回值:'2.997900e+10'
        %E                  指数型浮点数(E大写),如2.9E+10
            >>> "%E" %29979000000.0    #返回值:'2.997900E+10'

        %f,                 %F  浮点十进制形式
            >>> "%f" %29979000000.0   #返回值:'29979000000.000000'
            >>> "%F" %29979000000.0   #返回值:'29979000000.000000'
            >>> "%F" %2.997e+10       #返回值:'29970000000.000000'

        %g,                 %G  十进制形式浮点或指数浮点自动转换
            >>> "%g" %12.123                        #返回值:'12.123'
            >>> "%g" %12545361564531.123321564      #返回值:'1.25454e+13'

        %%                  等同于一个%字符
            >>> "利率为%f%%" %1.8                    #返回值:'利率为1.800000%'

    占位符%和类型码之间的格式语法:

        % [格式语法] 类型码 (a,s,f等)

            格式语法:
                -       左对齐
                +       右对齐
                0       补零
                宽度(十进制数字)
                宽度.精度(十进制数字)                #f,F

            示例:

                >>> "%10d" %123                   #返回值:'       123'
                >>> "%-10d" %123                  #返回值:'123       '

                >>> "%10s" %123                   #返回值:'       123'
                >>> "%10s" %'abc'                 #返回值:'       abc'
                >>> "%-5s" %'abc'                 #返回值:'abc  '

                >>> "%+10d" %123                  #返回值:      +123'
                >>> "%010d" %123                  #返回值:'0000000123'
                >>> "%0010d" %123                 #返回值:'0000000123'

                >>> "%020.5f" %123.123545689      #返回值:'00000000000123.12355'
                >>> "%0-20.5f" %123.123545689     #返回值:'123.12355           '
                >>> "%-020.5f" %123.123545689     #返回值:'123.12355           '
                >>> "%+020.5f" %123.123545689     #返回值:'+0000000000123.12355'

                >>> "%4.4f" %3.1415926            #返回值:'3.1416'

猜你喜欢

转载自blog.csdn.net/aa1209551258/article/details/81225191