• 18.Python格式化字符串(格式化输出)


    Python 提供了“%”对各种类型的数据进行格式化输出,例如如下代码:

    1. price = 108
    2. print ("the book's price is %s" % price)

    上面程序中的 print 函数包含以下三个部分,第一部分是格式化字符串(相当于字符串模板),该格式化字符串中包含一个“%s”占位符,它会被第三部分的变量或表达式的值代替;第二部分固定使用“%”作为分隔符。

    格式化字符串中的“%s”被称为转换说明符(Conversion Specifier),其作用相当于一个占位符,它会被后面的变量或表达式的值代替。“%s”指定将变量或值使用 str() 函数转换为字符串。

    如果格式化字符串中包含多个“%s”占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起来。例如如下代码:

    1. user = "Charli"
    2. age = 8
    3. # 格式化字符串有两个占位符,第三部分提供2个变量
    4. print("%s is a %s years old boy" % (user , age))

    在格式化字符串中难道只能使用“%s”吗?还有其他转换说明符吗?如果只有“%s”这一种形式,Python 的格式化功能未免也太单一了。

    实际上, Python 提供了如表 1 所示的转换说明符:

    表 1 Python转换说明符
    转换说明符说明
    %d,%i 转换为带符号的十进制形式的整数
    %o 转换为带符号的八进制形式的整数
    %x,%X 转换为带符号的十六进制形式的整数
    %e 转化为科学计数法表示的浮点数(e 小写)
    %E 转化为科学计数法表示的浮点数(E 大写)
    %f,%F 转化为十进制形式的浮点数
    %g 智能选择使用 %f 或 %e 格式
    %G 智能选择使用 %F 或 %E 格式
    %c 格式化字符及其 ASCII 码
    %r 使用 repr() 将变量或表达式转换为字符串
    %s 使用 str() 将变量或表达式转换为字符串


    当使用上面的转换说明符时,可指定转换后的最小宽度,例如如下代码:

    1. num = -28
    2. print("num is: %6i" % num)
    3. print("num is: %6d" % num)
    4. print("num is: %6o" % num)
    5. print("num is: %6x" % num)
    6. print("num is: %6X" % num)
    7. print("num is: %6s" % num)

    运行上面代码,可以看到如下输出结果:

    num is:    -28
    num is:    -28
    num is:    -34
    num is:    -1c
    num is:    -1C
    num is:    -28

    从上面的输出结果可以看出,此时指定了字符串的最小宽度为 6,因此程序转换数值时总宽度为 6,程序自动在数值前面补充了三个空格。

    在默认情况下,转换出来的字符串总是右对齐的,不够宽度时左边补充空格。Python 也允许在最小宽度之前添加一个标志来改变这种行为,Python 支持如下标志:

    • -:指定左对齐。
    • +:表示数值总要带着符号(正数带“+”,负数带“-”)。
    • 0:表示不补充空格,而是补充 0。

    提示:这三个标志可以同时存在。

    例如如下代码:

    1. num2 = 30
    2. # 最小宽度为0,左边补0
    3. print("num2 is: %06d" % num2)
    4. # 最小宽度为6,左边补0,总带上符号
    5. print("num2 is: %+06d" % num2)
    6. # 最小宽度为6,右对齐
    7. print("num2 is: %-6d" % num2)

    运行上面代码,可以看到如下输出结果:

    num2 is: 000030
    num2 is: +00030
    num2 is: 30

    对于转换浮点数,Python 还允许指定小数点后的数字位数:如果转换的是字符串,Python 允许指定转换后的字符串的最大字符数。这个标志被称为精度值,该精度值被放在最小宽度之后,中间用点 ( . ) 隔开。例如如下代码:

    1. my_value = 3.001415926535
    2. # 最小宽度为8,小数点后保留3位
    3. print("my_value is: %8.3f" % my_value)
    4. # 最小宽度为8,小数点后保留3位,左边补0
    5. print("my_value is: %08.3f" % my_value)
    6. # 最小宽度为8,小数点后保留3位,左边补0,始终带符号
    7. print("my_value is: %+08.3f" % my_value)
    8. the_name = "Charlie"
    9. # 只保留3个字符
    10. print("the name is: %.3s" % the_name) # 输出Cha
    11. # 只保留2个字符,最小宽度10
    12. print("the name is: %10.2s" % the_name)

    运行上面代码,可以看到如下输出结果:

    my_value is:    3.001
    my_value is: 0003.001
    my_value is: +003.001
    the name is: Cha
    the name is:         Ch

  • 相关阅读:
    EJB>依赖注入(dependency injection) 小强斋
    EJB>自定义安全域 小强斋
    EJB>定时服务(Timer Service) 小强斋
    EJB>依赖注入(dependency injection) 小强斋
    EJB>定时服务(Timer Service) 小强斋
    EJB>安全服务的具体开发 小强斋
    EJB>JMS(Java Message Service)和消息驱动bean 小强斋
    EJB>拦截器(Interceptor) 小强斋
    《做最好的员工》第二章:好员工擅长合作
    教你29招,让你在社交,职场上人人对你刮目相看 !
  • 原文地址:https://www.cnblogs.com/youqc/p/12067473.html
Copyright © 2020-2023  润新知