可以指定格式字符串来调用.lower()吗?

时间:2015-08-03 11:52:37

标签: python string-formatting

当我指定格式字符串时,我想将其作为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()的原因。

可以以某种方式在格式字符串中指定转换为小写吗?

3 个答案:

答案 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'