冒号在Python字符串格式化中是什么意思?



我正在学习Python字符串format()方法。虽然我知道{}是参数的占位符,但我不确定:在Programiz教程中的以下代码片段中表示什么:

import datetime
# datetime formatting
date = datetime.datetime.now()
print("It's now: {:%Y/%m/%d %H:%M:%S}".format(date))

# custom __format__() method
class Person:
def __format__(self, format):
if(format == 'age'):
return '23'
return 'None'
print("Adam's age is: {:age}".format(Person()))
  1. 为什么print("It's now: {:%Y/%m/%d...%Y前面有:?代码输出It's now: 2021, 2021前无:
  2. 为什么print("Adam's age is: {:age}...age前面有:?

提前感谢您的宝贵意见!!

:之后的所有内容都是对应实参的类的__format__()方法的参数。例如,对于一个数字,您可以编写{:.2f}将其格式化为小数点后精度为2位的十进制数。

对于datetime值,它是一个可以与datetime.strftime()一起使用的格式字符串。

Person类中,它将作为format参数传递给Person.__format__()。所以如果你不把:age放在那里,if条件将失败,它将打印None而不是23

Python对象自己决定如何使用__format__方法格式化它们。大多数情况下,我们只使用基本类型自带的默认值,但就像__str____repr__一样,我们可以自定义。冒号:后面的部分是__format__的参数。

>>> class Foo:
...     def __format__(self, spec):
...             print(repr(spec))
...             return "I will stubbornly refuse your format"
... 
>>> f = Foo()
>>> print("Its now {:myformat}".format(f))
'myformat'
Its now I will stubbornly refuse your format

我们可以自己调用格式化器。datetime使用strftime格式规则。

>>> import datetime
>>> # datetime formatting
>>> date = datetime.datetime.now()
>>> print("It's now: {:%Y/%m/%d %H:%M:%S}".format(date))
It's now: 2021/10/04 11:12:23
>>> date.__format__(":%Y/%m/%d %H:%M:%S")
':2021/10/04 11:12:23'

您的自定义Person类实现了__format__,并使用冒号后的格式说明符返回值。

尝试f-strings。在它们中,结肠似乎更合理。它分隔变量名及其格式化选项:

import datetime
# datetime formatting
date = datetime.datetime.now()
print(f"It's now: {date:%Y/%m/%d %H:%M:%S}")
# custom __format__() method
class Person:
def __format__(self, format):
if(format == 'age'):
return '23'
return 'None'
print(f"Adam's age is: {Person():age}")

顺便说一句,您可以使用format()的关键字参数实现类似的功能:

print("It's now: {d:%Y/%m/%d %H:%M:%S}".format(d=date))
print("Adam's age is: {adam:age}".format(adam=Person()))

相关内容

  • 没有找到相关文章

最新更新