Python 是否将格式字符串从%更改为替换字符?
在Python2.6中,是否有一种方法可以为字符串格式化操作指定除%以外的其他字符?或者%char是在python解释器中硬编码的 例如,要生成如下所示的字符串:Python 是否将格式字符串从%更改为替换字符?,python,Python,在Python2.6中,是否有一种方法可以为字符串格式化操作指定除%以外的其他字符?或者%char是在python解释器中硬编码的 例如,要生成如下所示的字符串: param1%02param2%03param3... 我目前必须这样做: str = "%s%%02%s%%03%s" % (param1, param2, param3) 我希望能够做的是,用“^”代替%,并能够做到: str = "^s%02^s%03^s" ^ (param1, param2, param3) 哪个IMO
param1%02param2%03param3...
我目前必须这样做:
str = "%s%%02%s%%03%s" % (param1, param2, param3)
我希望能够做的是,用“^”代替%,并能够做到:
str = "^s%02^s%03^s" ^ (param1, param2, param3)
哪个IMO更具可读性。
%
是硬编码的。然而,你可以做一些像
your_str = ("%s^02%s^03%s" % (param1, param2, param3)).replace("^", "%")
>>> '{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'
或
你不能——它甚至不是用python硬编码的,而是在libc(低于解释器的级别)中硬编码的。您可以编写一个函数,用
^
将字符串转换为%
,并将现有的%
转换为%
,然后将其传递给格式化。您可以使用新的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'
有关更多信息,请查看文档:我完全同意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'
但是,我不建议在一般情况下这样做,因为这样会使代码更难阅读和维护。为了提高可读性而更改语言语法会适得其反,因为代码的其他读者根本无法阅读它。考虑其他让它更可读的方法!为什么不为分隔符使用一个不同于%0的字符,然后在格式化后用%0替换该序列,例如,
str=“%s | 2%s | 3%s”%(param1,param2,param3)
str=str.replace('|','%0')
@Dani-您应该看看实际有哪些代码。我给出的代码示例中的%
符号不需要转义;它们是应该被替换的地方。替换发生在替换之后。我更喜欢join
方法,因为它不会吹走^
,它可能正确地位于param
变量之一…向str.format()欢呼。我相信''join()从来就不是为了服务于这种格式化目的。为了简单地将一系列项连接在一起,join()
完全是为了这个目的。不,不是。格式化代码是Python的一部分;参见stringobject.c中的PyString_格式。libc与Python字符串有什么关系?@Franklin:libc过去在Python字符串格式背后做了很多工作。我完全同意你的看法。这无疑是目前格式化字符串的最佳方法,因为%运算符已被弃用。这根本不能回答问题。当然,新的格式字符串语法很好,但我怀疑从C继承的旧语法是否适用。此外,新的语法只会使问题加倍,现在您必须转义{
和}
。@Matt真正起作用的东西并不能回答这个问题??问题在于%
而不是{
和}
。仅仅因为你不喜欢正确的东西并不意味着你应该否决它。@Matt顺便说一句,如果您不喜欢新语法,您应该远离python,因为Python3上的%
操作符已被弃用。我不认为在python的未来版本中描述为可能消失的旧式字符串格式是停止使用Python3的原因。我可能会提到,我只使用Python3,并为此付费,而且两种格式都不喜欢。