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()))
- 为什么
print("It's now: {:%Y/%m/%d...
中的%Y
前面有一个:
?代码输出It's now: 2021
,2021前面没有:
- 为什么
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 一个值。
我正在学习 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()))
- 为什么
print("It's now: {:%Y/%m/%d...
中的%Y
前面有一个:
?代码输出It's now: 2021
,2021前面没有:
- 为什么
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 一个值。