gpt4 book ai didi

python - 如何从格式字符串提供自定义格式?

转载 作者:太空狗 更新时间:2023-10-30 01:17:51 24 4
gpt4 key购买 nike

我可以使用自定义类来扩展 Python 的字符串格式:

class CaseStr(str):
def __format__(self, fmt):
if fmt.endswith('u'):
s = self.upper()
fmt = fmt[:-1]
elif fmt.endswith('l'):
s = self.lower()
fmt = fmt[:-1]
else:
s = str(self)
return s.__format__(fmt)

然后我可以使用此类来格式化传递给字符串格式化方法的参数:

unformatted_string = 'uppercase: {s:u}, lowercase: {s:l}'
print unformatted_string.format(s=CaseStr('abc'))

虽然这可行,但自定义格式说明符在基本字符串中似乎很尴尬,但传递给它的格式方法的参数实际上负责解析格式说明符。

有没有办法将解释自定义字符串所需的知识放在基本字符串本身中?

class CaseStrWrapper(str):
...

unformatted_string = CaseStrWrapper('uppercase: {s:u}, lowercase: {s:l}')
print unformatted_string.format(s='abc')

最佳答案

您通常会使用 custom string formatting为此(参见 PEP 3101 )。对于你的情况,你可以有这样的东西:

import string

class MyFormatter(string.Formatter):
def format_field(self, value, format_spec):
if isinstance(value, str):
if format_spec.endswith('u'):
value = value.upper()
format_spec = format_spec[:-1]
elif format_spec.endswith('l'):
value = value.lower()
format_spec = format_spec[:-1]
return super(MyFormatter, self).format(value, format_spec)

fmt = MyFormatter()
print(fmt.format('uppercase: {s:u}, lowercase: {s:l}', s='abc'))
# uppercase: ABC, lowercase: abc

关于python - 如何从格式字符串提供自定义格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57570026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com