当我指定格式字符串时,我想将其作为conversion
步骤的一部分调用.lower()
:
# before:
"Bring out the holy {name!s}".format(name="RaBbIt")
# 'Bring out the holy RaBbIt'
# after:
"Bring out the holy {name!s.lower()}".format(name="RaBbIt")
# 'Bring out the holy rabbit'
我会将此格式字符串传递给另一个类,但我无法改变其使用方式,这就是我无法在.lower()
调用中调用.format()
的原因。
可以以某种方式在格式字符串中指定转换为小写吗?
答案 0 :(得分:3)
不,str.format()
和format()
无法转换大小写(或以其他方式调用对象上的方法)。你必须在插值之前这样做。
答案 1 :(得分:2)
由于您有一个只传递格式字符串的黑盒子,您可以传递自己的对象,该对象具有format
方法,如下所示:
## this is a black box:
def doThings (formatString):
print(formatString.format(name='RaBbIt'))
##
class LowerCaseFormatString:
def __init__ (self, formatString):
self.formatString = formatString
def format (self, *args, **kwargs):
args = [x.lower() for x in args]
kwargs = { k: v.lower() for k, v in kwargs.items() }
return self.formatString.format(*args, **kwargs)
fs = LowerCaseFormatString('Bring out the holy {name!s}')
doThings(fs)
# prints: 'Bring out the holy rabbit'
答案 2 :(得分:0)
在Python 3.6+中,您可以使用fstrings完成此操作。 https://realpython.com/python-f-strings/
>>> txt = 'aBcD'
>>> f'{txt.lower()}'
'abcd'