将格式字符串从 % 更改为替代字符?

2 投票
4 回答
626 浏览
提问于 2025-04-16 20:17

在 Python 2.6 中,有没有办法指定一个除了 % 以外的其他字符来进行字符串格式化操作?还是说 % 这个字符是死死写在 Python 解释器里的?

比如,我想生成一个看起来像这样的字符串:

param1%02param2%03param3...

我现在必须这样做:

str = "%s%%02%s%%03%s" % (param1, param2, param3)

我希望能够把 % 替换成,比如说 ^,然后可以这样做:

str = "^s%02^s%03^s" ^ (param1, param2, param3)

在我看来,这样的写法要更容易理解。

4 个回答

2

% 是写死的。不过,你可以尝试做一些类似下面的事情...

your_str = ("%s^02%s^03%s" % (param1, param2, param3)).replace("^", "%")

或者

your_str = ''.join([param1, '%02', param2, '%03', param3])
2

我完全同意JBernardo的回答,不过为了更全面,我想指出其实可以根据提问者的需求来调整语言。这需要从str类派生一个新类,并重写它的^运算符:

class yourstr(str):
    def __xor__(self, tuple):
        return self.replace("%", "%%").replace("^", "%") % tuple

然后你可以做类似这样的事情:

>>> param1 = "foo"
>>> param2 = "bar"
>>> param3 = "quux"
>>> yourstr("^s%02^s%03^s") ^ (param1, param2, param3)
'foo%02bar%03quux'

不过,我不太建议在一般情况下这么做,因为这样会让代码变得更难读和维护。

3

你可以使用新的 str.format 方法。这个方法提供了更多的格式化选项,而且看起来更容易理解。

>>> '{0}%02{1}%03{2}'.format('a', 'b', 'c')
'a%02b%03c'

>>> '{param1} is also {param2}'.format(param1='foo', param2='bar')
'foo is also bar'

>>> '{0[name]} is {0[age]} years old'.format({'name': 'Bob', 'age': 42})
'Bob is 42 years old'

想了解更多信息,可以查看文档: 格式字符串语法

撰写回答