Python格式化字符串新语法:f-strings
原文地址: https://www.zhblog.net/go/python/advanced/python-fstrings?t=562
从Python3.6开始,引入了一个新的格式化字符串方式:f-strings。它与之前的格式化方法相比,更具可读性,代码更简洁,不易出错,并且速度更快。
python之前的格式化字符串方式
在python3.6之前,主要有两种方式格式化字符串:%-formatting 和 str.format()。
%-formatting
这是python最开始内置的格式化方式,但现在它已不被官方推荐使用,因为它容易引发错误。
>>> name = "zh"
>>> "Hello, %s" % name
'Hello, zh'
要想替换多个值可以使用元组
>>> name = "zh"
>>> age = 32
>>> "Hello, %s. You are %s." % (name, age)
'Hello, zh. You are 32.'
%-formatting不友好的方面
上面的代码可读性不错,但是当我们需要在一个长的字符串中替换多个参数,它将变得不可读,且容易出错。
>>> first_name = "z"
>>> last_name = "h"
>>> age = 32
>>> profession = "it"
>>> affiliation = "python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, z h. You are 32. You are a it. You were a member of python.'
str.format()
这种方式在python2.6中引进,是对%-formatting的改良。它使用普通方法调用的语法,并且可以使用对象__format__()方法进行扩展。
在 str.format() 中,需要替换的字段使用大括号标记
>>> "Hello, {}. You are {}".format(name, age)
'Hello, zh. You are 32'
可以使用索引来改变替换的顺序
>>> "Hello, {1}. You are {0}".format(age, name)
'Hello, zh. You are 32'
如果你想使用参数名称,只需在大括号中填写参数名,这样可读性更强
>>> person = {'name': 'zh', 'age': 32}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, zh. You are 32.'
当然,使用 ** 解包字典更方便
>>> person = {'name': 'zh', 'age': 32}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, zh. You are 32.'
str.format() 于 %-formatting 相比绝对是一种升级,更易使用,代码可读性更强。
新的改良方式:f-strings
一种更简单的方式,要想使用,确保 python 版本是 3.6+。
f-strings是以f开头的字符串,中间需要被替换的字段使用大括号表示。f-strings是运行时解析,所以在大括号中可以使用python表达式。
使用方式与 str.format() 类似
>>> name = "zh"
>>> age = 32
>>> f"Hello, {name}. You are {age}."
'Hello, zh. You are 32.'
大写F也可以
>>> name = "zh"
>>> age = 32
>>> F"Hello, {name}. You are {age}."
'Hello, zh. You are 32.'
使用python表达式
可以直接做些简单的事情
>>> f"{2 * 3}"
'6'
调用函数
>>> def to_lowercase(src):
    return src.lower()
>>> name = "ZH"
>>> f"{to_lowercase(name)} if funny."
'zh if funny.'
也可以直接调用对象的方法
>>> name = "ZH"
>>> f"{name.lower()} is funny."
'zh is funny.'
f-strings 也可以作用在类对象上
>>> class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
    def __str__(self):
        return f"{self.first_name} {self.last_name} is {self.age}."
    def __repr__(self):
        return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"
    
>>> person = Person("z", "h", 32)
>>> f"{person}"
'z h is 32.'
正常情况下 __str__() 返回对象可读的信息,__repr__() 返回对象明确的信息,str() 和 repr() 分别对应这两种方法。
f-strings 默认是使用 __str__() 方法,如果你想使用 __repr__() 方法,需要明确指定 !r。
>>> person = Person("z", "h", 32)
>>> f"{person}"
'z h is 32.'
>>> f"{person!r}"
'z h is 32. Surprise!'
多行字符串
在多行字符串中,每行字符串前都必须以 f开头
>>> name = "zh"
>>> age = 32
>>> affiliation = "python"
>>> message = (
    f"Hi {name}"
    f"You are {age}"
    f"You were in {affiliation}"
    )
>>> message
'Hi zhYou are 32You were in python'
不加会原样输出
>>> message = (
    f"Hi {name}"
    "You are {age}"
    "You were in {affiliation}"
    )
>>> message
'Hi zhYou are {age}You were in {affiliation}'
当然多行字符串仍然可以使用
>>> message = f"Hi {name}. " \
      f"You are {age}. " \
      f"You were in {affiliation}."
>>> message
'Hi zh. You are 32. You were in python.'
f-strings 也可以配置 """ 使用
>>> message = f"""
    Hi {name}.
    You are {age}.
    You were in {affiliation}.
    """
>>> message
'\n\tHi zh.\n\tYou are 32.\n\tYou were in python.\n\t'
更快的速度
f-strings 比 %-formatting 和 str.format() 都要快。f-strings 在运行时解析表达式,而不是作为常量值。
运行时,大括号内的表达式被解析求值,然后与 f-strings 字符串中其余部分放一起,并返回。
对比三种方式的速度
>>> import timeit
>>> timeit.timeit("""name = "zh"
age = 32
"%s is %s." % (name, age)""")
0.2921929999999975
>>> timeit.timeit("""name = "zh"
age = 32
"{} is {}".format(name, age)""")
0.27604440000004615
>>> timeit.timeit("""name = "zh"
age = 32
f'{name} is {age}'""")
0.20125310000003083
默认运行次数  number=1000000 ,可以看到 f-strings 时最快的。
总结:    
你可以继续使用以前的格式化字符串方法,但 f-strings 更容易使用,阅读性更强,并且速度更快,不易出错。如果你的 Python 3.6+ ,你应该尝试用它完成工作。
原文地址: https://www.zhblog.net/go/python/advanced/python-fstrings?t=562

Python格式化字符串新语法:f-strings相关推荐

  1. python格式化字符串%r_Python语法速查:3.字符串格式化

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > (1)简易字符串格式化 字符串属于不可变序列,只能生成新的,不能改变 ...

  2. python格式化字符串的三种方法(%,format,f-string)

    DAY 7. 格式化字符串 到目前为止,我所知道的,python格式化字符串有三种方法,第一是早期就有的%,其次是2.5之后的format(),还有就是3.6添加的f字符串调试 7.1 %格式化字符串 ...

  3. Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式 本文参考输入输出 - Python 3.7.10 文档.首先声明咱的实验环境. ❯ python --version Pytho ...

  4. Python格式化字符串的4种方式

    文章目录 Python格式化字符串的4种方式 一:%号 二:str.format 三:f-Strings 四:标准库模板 五:总结四种方式的应用场景 Python格式化字符串的4种方式 一:%号 %号 ...

  5. python 格式化字符串长度_python-格式化字符串

    python格式化字符串有两种方式: 1.百分号形式(%):默认右对齐   "-"表示多对齐 常用的类型码: s -->字符串 d---->数字   f--->浮 ...

  6. python: 格式化字符串f()用法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/sunxb10/article/deta ...

  7. Python格式化字符串f-string f{}{}{}详细介绍

    简介 f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal S ...

  8. python格式化输出%s、f格式化字符串、print结束语

    目录 格式化输出 f字符 print结束语 格式化输出 即按照一定的格式输出内容. %s   格式化输出   字符串 %d  格式化输出     有符号的十进制整数(有符号的整数包含正整数和负整数,也 ...

  9. python格式化字符串_Python的3种字符串格式化方法,哪种你最喜欢?

    文末扫二维码领[Python开源项目包] 赠书×大厂笔面试题:秋招一直当炮灰?提升你实力的机会来了! 黄伟呢 | 作者数据分析与统计学之美 | 来源 1 3种字符串格式化工具的简单介绍 python2 ...

最新文章

  1. Linux后台运行打包Jar的方法
  2. Tomcat学习笔记02【Tomcat部署项目】
  3. 在ElementUI中改变el-table中的el-table-column样式
  4. sql server 2005单独添加mdf文件
  5. CSS实现垂直居中布局
  6. Windows Phone 7 优秀开源项目概览 来源:http://www.cnblogs.com/porscheyin/archive/2010/12/15/1906476.html...
  7. POJ 1696 Space Ant(点积的应用)
  8. [C++]最大连续子序列乘积
  9. java python混合编程_python+java混合编程
  10. 扩展欧几里得算法——java
  11. jmp软件(jMP软件正交设计交互作用)
  12. 腾讯云聚合支付平台Restful API,支付开发的又一福音,同时支持微信支付和支付宝
  13. VBA学习练习-将多个单元格内容合并
  14. 专属微信二维码python制作_如何通过一行代码制作个人专属动态微信二维码?
  15. 用qpython3写一个发送短信的程序
  16. WSL2 安装 CUDA(Win11)
  17. hdmi怎么支持2k分辨率_选择2K显示器有没有必要?
  18. csp怎么给线条描边,插画师要失业了?还在纠结阴影怎么画?CSP软件能直接自动生成...
  19. 关于google smtp邮件发送
  20. 五大经典算法-动态规划 及其算法应用

热门文章

  1. 基于MATLAB的特殊函数积分
  2. Matplotlib中画图,使用带有边框的条线
  3. 一对一python培训班多少钱
  4. 子集生成的两种方法 (增量构造法 和 位向量法)
  5. K8S二进制环境搭建苹果电脑(M1芯片)
  6. 自学python能干什么知乎_自学python能干什么
  7. Leaf-美团分布式ID生成服务
  8. java中的枚举是什么?枚举怎么使用?
  9. 计算最高分,最低分,平均分
  10. 操作系统开发系列—13.i.进程调度 ●