ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2、词法分析--4、字面值--3、格式化字符串

2020-01-31 09:53:56  阅读:208  来源: 互联网

标签:格式化 name 词法 字符串 expression spec 表达式


1、格式化字符串


3.6 新版功能

格式化字符串(f-string),是带有 fF 前缀的字符串。

这种字符串可包含替换字段,替换字段是以 { } 标示的表达式。

1.1 字符串语法

f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*

replacement_field ::=  "{" f_expression ["!" conversion] [":" format_spec] "}"

f_expression      ::=  (conditional_expression | "*" or_expr)
        ("," conditional_expression | "," "*" or_expr) * 
        [","] | yield_expression

conversion        ::=  "s" | "r" | "a"

format_spec       ::=  (literal_char | NULL | replacement_field)*

literal_char      ::=  <any code point except "{", "}" or NULL>

1.2 表达式替换规则

  • { { } }: 双花括号会被替换为响应的单个花括号。

  • { }: 单花括号标志一个替换字段,以一个 Python 表达式开头。

    • 表达式后可能有一个以叹号 ! 标示的转换字段。
    • 后面还可能带有一个以冒号 : 标示的格式说明符。
  • conversion:转换符

    • 如果指定了转换符,表达式的求值结果会先转换再格式化

    • !s ------------------ str()

      返回 object 的字符串版本。如果未提供 object 则返回空字符串

    • !r ------------------repr()

      返回包含一个对象的可打印形式的字符串。

    • !a ------------------ascii()

      返回一个对象的可打印的 ASCII 编码的字符串。

  • format_spec : 格式化说明符

    • 将表达式转化为 format_spec 控制的格式化表示。

>>> name = "Fred"

>>> f"He said his name is {name!r}."
    "He said his name is 'Fred'."
    
>>> f"He said his name is {repr(name)}."  # 使用 !r 
    "He said his name is 'Fred'."
    
>>> width = 10

>>> precision = 4

>>> value = decimal.Decimal("12.34567")

>>> f"result: {value:{width}.{precision}}"  # 表达式格式化
    'result:      12.35'
    
>>> today = datetime(year=2017, month=1, day=27)

>>> f"{today:%B %d, %Y}"  # 格式化日期
    'January 27, 2017'
    
>>> number = 1024

>>> f"{number:#0x}"  # 进制转化
    '0x400'
    

标签:格式化,name,词法,字符串,expression,spec,表达式
来源: https://www.cnblogs.com/wdzn/p/12244656.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有