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

What does colon mean in Python string formatting?

我正在学习 Python 字符串 format() 方法。虽然我知道 {} 是参数的占位符,但我不确定 : 在以下来自 Programiz tutorial:

的代码片段中代表什么
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前面有一个:

提前感谢您的宝贵意见!

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

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

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

尝试 f 弦。在它们中,冒号似乎更合理。它分隔变量名称及其格式选项:

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()))

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 class 实现了 __format__ 并使用冒号后的格式说明符 return 一个值。