旧式字符串格式需要显式 str() 转换吗?
Explicit str() conversion needed for old-style string formatting?
我正在维护一个旧的 Python 代码库,其中散布着一些非常奇怪的习语。我遇到的一件事是使用百分比编码样式的字符串格式:
'Error %s: %s' % (str(err), str(message))
忽略现代字符串插值.format()
的存在,我的问题是:
是否有必要使用 str()
显式转换 %s
参数,或者这正是 %s
所做的?
不,不需要显式 str()
调用,%s
格式化程序 包含 一个 str()
调用:
>>> class Foo(object):
... def __str__(self):
... return "I am a string for Foo"
...
>>> '%s' % Foo()
'I am a string for Foo'
这也明确记录在 String Formatting Operations section:
's'
String (converts any Python object using str()
).
不需要那样做。 %s
是用于打印的字符串格式化语法。这可能有助于添加更多上下文:
What does %s mean in Python?
这取决于您使用的具体规格。使用接近 C 语言 printf 语法的旧样式格式化。例如,
- %s 显示一个字符串(对传递的参数调用
str()
)。
- %r 显示表示(对传递的参数调用
repr()
)。
- %d取一个数。
- 等等
您在 documentation 上有整个列表。
我正在维护一个旧的 Python 代码库,其中散布着一些非常奇怪的习语。我遇到的一件事是使用百分比编码样式的字符串格式:
'Error %s: %s' % (str(err), str(message))
忽略现代字符串插值.format()
的存在,我的问题是:
是否有必要使用 str()
显式转换 %s
参数,或者这正是 %s
所做的?
不,不需要显式 str()
调用,%s
格式化程序 包含 一个 str()
调用:
>>> class Foo(object):
... def __str__(self):
... return "I am a string for Foo"
...
>>> '%s' % Foo()
'I am a string for Foo'
这也明确记录在 String Formatting Operations section:
's'
String (converts any Python object usingstr()
).
不需要那样做。 %s
是用于打印的字符串格式化语法。这可能有助于添加更多上下文:
What does %s mean in Python?
这取决于您使用的具体规格。使用接近 C 语言 printf 语法的旧样式格式化。例如,
- %s 显示一个字符串(对传递的参数调用
str()
)。 - %r 显示表示(对传递的参数调用
repr()
)。 - %d取一个数。
- 等等
您在 documentation 上有整个列表。