python3字符串格式化

格式化字符串方法

  1. %-formatting
    最传统的用%格式化字符串

传入单个变量

>>> name = "Kobe"
>>> "Hello, %s." % name
'Hello, Kobe.'

传入多个变量

>>> name = "Kobe"
>>> age = "40"
>>> "Hello, %s. You are %s." % (name, age)
'Hello, Kobe. You are 40.'

此方法为最传统的方法,缺点是,当需要很多变量输出时,会导致代码比较乱,而且不同格式的字符需要不同的占位符来代替。

  1. string.format ()
    从python2.6诞生的方法
    该方法是对%-formatting的改进。它使用正常的函数调用语法,并且可以通过对要转换为字符串的对象的__format __()方法进行扩展。
    使用大括号{ }来作为占位符,不区分格式。
>>> name = "Kobe"
>>> age = "40"
>>> "Hello,{}. You are {}".format(name,age)
'Hello,Kobe. You are 40'

可以根据索引来调整参数的传递

>>> name = "Kobe"
>>> age = "40"
>>> "Hello,{1}. You are {0}".format(name,age)
'Hello,40. You are Kobe'

如果插入变量名称,则可以按照变量名称传递对象:

>>> "Hello,{name}. You are {age}".format(name=name,age=age)
'Hello,Kobe. You are 40'

也可以按照字典传参:

>>> person = {"name":"Kobe","age":"40"}
>>> "Hello,{name}. You are {age}".format(**person)
'Hello,Kobe. You are 40'
  1. f-string
    python3.6诞生的新方法
    该方法叫做“F字符串方法”,又称为“格式化字符串文字”。F字符串是开头有一个f的字符串文字,以及包含表达式的大括号将被其值替换。表达式在运行时进行渲染,然后使用__format__协议进行格式化。
>>> name = 'kobe'
>>> f'his name is {name}'
'his name is kobe'

由于f字符串是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中:

>>> a = 3
>>> b = 4
>>> f'{a+b}'
'7'

可以使用带有f字符串的类创建对象:

class Comedian:
    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!"
>>> new_comedian = Comedian("kobe", "bryant", "40")
>>> f"{new_comedian}"
'kobe bryant is 40.'

__str __()和__repr __()方法处理对象如何呈现为字符串,因此您需要确保在类定义中包含至少一个这些方法。如果必须选择一个,请使用__repr __(),因为它可以代替__str __()。

__str __()返回的字符串是对象的非正式字符串表示,应该可读。__repr __()返回的字符串是官方表示,应该是明确的。调用str()和repr()比直接使用__str __()和__repr __()更好。

默认情况下,f字符串将使用__str __(),但如果包含转换标志!r,则可以确保它们使用__repr __():

>>> new_comedian = Comedian("kobe", "bryant", "40")
>>> f"{new_comedian}"
'kobe bryant is 40.'

>>> new_comedian = Comedian("kobe", "bryant", "40")
>>> f"{new_comedian!r}"
'kobe bryant is 40. Surprise!'

多行f-string:

>>> a = 3
>>> b = 4
>>> print(f'{a}'
... f'{b}'
... f'{a+b}')
347

多行时必须每行都要有f,不然会有下面结果:

>>> print(f'{a}'
... '{b}'
... '{a+b}')
3{b}{a+b}

lambda表达式
如果需要使用lambda表达式,请记住,解析f-字符串的方式会稍微复杂一些。

如果!, :或}不在括号,大括号,括号或字符串中,则它将被解释为表达式的结尾。由于lambda使用:,这可能会导致一些问题:

>>> f"{lambda x:x*37 (2)}"
  File "<fstring>", line 1
    (lambda x)
             ^
SyntaxError: unexpected EOF while parsing

可以通过将lambda嵌套在圆括号中来解决此问题:

>>> f"{(lambda x:x*37) (2)}"
'74'
  1. 性能
    f字符串中的f也可以代表“速度快”。
    f-字符串比%-formatting和str.format()都快。正如你已经看到的,f-字符串是运行时渲染的表达式,而不是常量值。

参考文档:
https://realpython.com/python-f-strings/#multiline-f-strings
中文翻译的(有错):
https://mlln.cn/2018/05/19/python3 f-string格式化字符串的高级用法/#旧时代的格式化字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值