zoukankan      html  css  js  c++  java
  • Python基础 | 格式化输出

    Python format 格式化函数

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

    基本语法是通过 {} 和 : 来代替以前的 % 。

    format 函数可以接受不限个参数,位置可以不按顺序。

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

     也可以设置参数:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    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
    

     也可以向 str.format() 传入对象:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    class AssignValue(object):
        def __init__(self, value):
            self.value = value
    my_value = AssignValue(6)
    print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
    

     输出结果为:

    value 为: 6
    

    数字格式化

    下表展示了 str.format() 格式化数字的多种方法:

    >>> print("{:.2f}".format(3.1415926));
    3.14
    
    数字格式输出描述
    3.1415926  {:.2f}  3.14  保留小数点后两位 
    3.1415926  {:+.2f}  +3.14  带符号保留小数点后两位 
    -1  {:+.2f}  -1.00  带符号保留小数点后两位 
    2.71828  {:.0f}  不带小数 
    {:0>2d}  05  数字补零 (填充左边, 宽度为2) 
    {: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 分别是二进制、十进制、八进制、十六进制。

    此外我们可以使用大括号 {} 来转义大括号,如下实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    print ("{} 对应的位置是 {{0}}".format("runoob"))
    
    runoob 对应的位置是 {0}
    

     % 操作符,格式如下:

    %[(name)][flags][width].[precision]typecode
    
    •  (name) 为命名
    •  flags 可以有 +,-,' '或 0。+ 表示右对齐。- 表示左对齐。' ' 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充。
    •  width 表示显示宽度
    •  precision 表示小数点后精度

    以下是类型码:

    %s    字符串 (采用str()的显示)
    %r    字符串 (采用repr()的显示)
    %c    单个字符
    %b    二进制整数
    %d    十进制整数
    %i    十进制整数
    %o    八进制整数
    %x    十六进制整数
    %e    指数 (基底写为e)
    %E    指数 (基底写为E)
    %f    浮点数
    %F    浮点数,与上相同%g    指数(e)或浮点数 (根据显示长度)
    %G    指数(E)或浮点数 (根据显示长度)
    %%    字符"%"
    

     举例

    >>> print("%6.3f" % 2.3)
     2.300
    
    •  第一个 % 后面的内容为显示的格式说明,6 为显示宽度,3 为小数点位数,f 为浮点数类型 
    •  第二个 % 后面为显示的内容来源,输出结果右对齐,2.300 长度为 5,故前面有一空格 
    >>> print("%+10x" % 10)
        +a
    

    x 为表示 16 进制,显示宽度为 10,前面有 8 个空格。

    >>>print("%-5x" % -10)
    -a  
    

    %-5x 负号为左对齐,显示宽度为 5,故 -a 后面有 3 个空格

    >>>pi=3.1415
    >>>print ("pi的值是%s"%pi)
    pi的值是3.1415
    
    >>>print ("pi的值是%.8f"%pi)
    pi的值是3.14150000
    

    上面的 width, precision 为两个整数。我们可以利用 *,来动态代入这两个量。比如:

    >>> print("%10.*f" % (4, 1.2))
      1.2000
    

    以下是补充

    简单的说,这是一种将其他变量置入字符串特定位置以生成新字符串的操作,比如说:

    >>> n = "Runoob"
    >>> "My name is %s" % n
    'My name is Runoob'
    

    这段代码首先定义了一个名为 n 的变量,内容为 Runoob。然后下方的字符串中有一个 %s,他的含义是“这里将被替换成一个新的字符串”,用作替换的内容放在字符串后面的%后面,就是那个 n。所以最终这个字符串会变成 My name is Runoob。

    如果在 str.format() 调用时使用关键字参数,可以通过参数名来引用值:

    >>> print('This {food} is {adjective}.'.format(
    ...       food='spam', adjective='absolutely horrible'))
    This spam is absolutely horrible.
    

    位置参数和关键字参数可以随意组合:

    >>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred', other='Georg')) The story of Bill, Manfred, and Georg.
    

    !a (应用 ascii()), !s (应用 str() )和 !r (应用 repr() )可以在格式化之前转换值:

    >>> import math
    >>> print('The value of PI is approximately {}.'.format(math.pi))
    The value of PI is approximately 3.14159265359.
    >>> print('The value of PI is approximately {!r}.'.format(math.pi))
    The value of PI is approximately 3.141592653589793.
    

    字段名后允许可选的  : 和格式指令。这允许对值的格式化加以更深入的控制。下例将 Pi 转为三位精度。

    >>> import math
    >>> print('The value of PI is approximately {0:.3f}.'.format(math.pi))
    The value of PI is approximately 3.142.
    

    在字段后的  : 后面加一个整数会限定该字段的最小宽度,这在美化表格时很有用:

    >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
    >>> for name, phone in table.items():
    ...     print('{0:10} ==> {1:10d}'.format(name, phone))
    ...
    Jack       ==>       4098
    Dcab       ==>       7678
    Sjoerd     ==>       4127
    

    如果你有个实在是很长的格式化字符串,不想分割它。如果你可以用命名来引用被格式化的变量而不是位置就好了。有个简单的方法,可以传入一个字典,用中括号(  [] )访问它的键:

    >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
    >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
              'Dcab: {0[Dcab]:d}'.format(table))
    Jack: 4098; Sjoerd: 4127; Dcab: 8637678
    

    也可以用  ** 标志将这个字典以关键字参数的方式传入:

    >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
    >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
    Jack: 4098; Sjoerd: 4127; Dcab: 8637678
    

    元组的 format 用法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    k=("name","mh")
    v="名字:{0},name:{1}".format(*k)
    print(v)
    

    利用 ''.format() 和 eval() 来实现简单的进制转换:

    ii=input('input num:')    #取值
    iid=eval(ii)              #变数字
    
    bnum_str='{:b}'.format(iid)    #二进制化(字符串)
    bnum=eval(bnum_str)            #字符串转数字(留用)
    
    str_putOut='num in b is:{:b}'.format(iid)    #输出准备
    
    
    print(bnum,str_putOut)     #显示数字和准备的输出内容
    

     还可以加入检测输入内容是否为数字或算式的功能、增加用户选择进制转换种类的功能。

  • 相关阅读:
    【记录】Excel 中VLOOPUP 使用心得
    【记录】Mybatis-plus中Page插件 快速进行分页操作
    【记录】mybatis-plus 更新字段的三种策略解析
    Instant Client连接数据库
    python3安装沙盒环境
    redis配置哨兵模式
    redis主从配置
    mongodb4.2主从(副本集附仲裁节点)部署带认证模式
    主从数据不一致导出同步错误(主库删除记录,从库不存在)
    批量执行redis命令
  • 原文地址:https://www.cnblogs.com/-saber/p/14278308.html
Copyright © 2011-2022 走看看