zoukankan      html  css  js  c++  java
  • Python中format的用法

    这篇文章讲的比较全面

    自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?

    语法

    它通过{}和:来代替%。
    “映射”示例

    通过位置


    字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
    通过关键字


    通过对象属性


    通过下标


     

    有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。
    格式限定符


    它有着丰富的的“格式限定符”(语法是{}中带:号),比如:

    填充与对齐
    填充常跟对齐一起使用
    ^、<、>分别是居中、左对齐、右对齐,后面带宽度
    :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
    比如

    精度与类型f
    精度常跟类型f一起使用

    其中.2表示长度为2的精度,f表示float类型。

    其他类型


    主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。

    用,号还能用来做金额的千位分隔符。

    format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点。

    1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型

    2.单个参数可以多次输出,参数顺序可以不相同

    3.填充方式十分灵活,对齐方式十分强大

    4.官方推荐用的方式,%方式将会在后面的版本被淘汰

    format的一个例子

    会输出hello world

    format的格式

    replacement_field     ::=  “{” [field_name] [“!” conversion] [“:” format_spec] “}”
    field_name              ::=      arg_name (“.” attribute_name | “[” element_index “]”)*
    arg_name               ::=      [identifier | integer]
    attribute_name       ::=      identifier
    element_index        ::=      integer | index_string
    index_string           ::=      <any source character except “]”> +
    conversion              ::=      “r” | “s” | “a”
    format_spec            ::=      <described in the next section>

    format_spec 的格式
    format_spec   ::=    [[fill]align][sign][#][0][width][,][.precision][type]
    fill             ::=    <any character>
    align           ::=    ”<” | “>” | “=” | “^”
    sign            ::=    ”+” | “-” | ” “
    width           ::=    integer
    precision       ::=    integer
    type            ::=    ”b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | “%”
     

    应用:

    一 填充

    1.通过位置来填充字符串

    foramt会把参数按位置顺序来填充到字符串中,第一个参数是0,然后1 ……

    也可以不输入数字,这样也会按顺序来填充

    同一个参数可以填充多次,这个是format比%先进的地方

    2.通过key来填充

    3.通过下标填充

    4.通过字典的key

    注意访问字典的key,不用引号的

    5.通过对象的属性

    6.使用魔法参数

    二 格式转换

    b、d、o、x分别是二进制、十进制、八进制、十六进制。

    数字 格式 输出 描述
    3.1415926 {:.2f} 3.14 保留小数点后两位
    3.1415926 {:+.2f} 3.14 带符号保留小数点后两位
    -1 {:+.2f} -1 带符号保留小数点后两位
    2.71828 {:.0f} 3 不带小数
    1000000 {:,} 1,000,000 以逗号分隔的数字格式
    0.25 {:.2%} 25.00% 百分比格式
    1000000000 {:.2e} 1.00E+09 指数记法
    25 {0:b} 11001 转换成二进制
    25 {0:d} 25 转换成十进制
    25 {0:o} 31 转换成八进制
    25 {0:x} 19 转换成十六进制

    三 对齐与填充

    数字 格式 输出 描述
    5 {:0>2} 05 数字补零 (填充左边, 宽度为2)
    5 {:x<4} 5xxx 数字补x (填充右边, 宽度为4)
    10 {:x^4} x10x 数字补x (填充右边, 宽度为4)
    13 {:10}         13 右对齐 (默认, 宽度为10)
    13 {:<10} 13 左对齐 (宽度为10)
    13 {:^10}     13 中间对齐 (宽度为10)

    四 其他

    1.转义{和}符号

    跟%中%%转义%一样,formate中用两个大括号来转义

    2.format作为函数

    3.格式化datetime

    4.{}内嵌{}

    5.叹号的用法

    !后面可以加s r a 分别对应str() repr() ascii()

    作用是在填充前先用对应的函数来处理参数

    差别就是repr带有引号,str()是面向用户的,目的是可读性,repr()是面向Python解析器的,返回值表示在python内部的含义

    ascii()一直报错,可能这个是3.0才有的函数

    参考:https://docs.python.org/3/library/string.html#grammar-token-conversion

     
  • 相关阅读:
    批量改文件名小工具
    整理一下在 npmjs.com 上面发布资源包踩过的坑
    告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态
    vue3 专用 indexedDB 封装库,基于Promise告别回调地狱
    C++ 学习笔记(三):介绍几个在线编译器【转】
    【Linux】一篇文章彻底搞定信号!【转】
    缓存淘汰算法系列(一)【转】
    缓存淘汰算法 LRU 和 LFU【转】
    NAND Flash标准之ONFI VS TOGGLE【转】
    NAND FLASH学习笔记之nand flash基础(一)【转】
  • 原文地址:https://www.cnblogs.com/dahu-daqing/p/6666301.html
Copyright © 2011-2022 走看看