Python 中 %()s 的含义是什么?

lol*_*olo 9 python string-formatting string-interpolation

%(asctime)s在日志模块中看到这样

%()s代替是%s什么意思?

我只知道%s意思是“字符串”,我%()s在互联网上找不到其他信息。

Ste*_*eve 9

这是使用%Python 字符串格式化形式将值插入字符串时的字符串格式化功能。您正在查看的案例允许通过提供字典并在格式字符串中指定该字典的键来从字典中获取命名值。下面是一个例子:

values = {'city': 'San Francisco', 'state': 'California'}
s = "I live in %(city)s, %(state)s" % values
print(s)
Run Code Online (Sandbox Code Playgroud)

结果:

values = {'city': 'San Francisco', 'state': 'California'}
s = "I live in %(city)s, %(state)s" % values
print(s)
Run Code Online (Sandbox Code Playgroud)


Tay*_*wte 5

%(asctime)s是日志模块用来获取对象'asctime' 属性的LogRecord占位符。

符号'%(key)s'用于标识映射中的键并将其值插入格式字符串中。例如,考虑一个名叫 john 的人,他身高 168 厘米,体重 72 公斤。

person = {'name': 'john', 'height': 168, 'weight': 72}
Run Code Online (Sandbox Code Playgroud)

如果要打印它们的名称和权重,则不需要指定插入的每个实例,也不需要考虑权重是 int 的事实。您需要做的就是指定您想要的键(在说明%()s符内)并在%.

>>> print('%(name)s, %(weight)s' % person)
john, 72
Run Code Online (Sandbox Code Playgroud)

这种字符串格式化方法类似于str.format()

>>> print('{name}, {weight}'.format(**person))
john, 72
Run Code Online (Sandbox Code Playgroud)

  • 我编辑了这个答案,因为一堆术语和其他细节是错误的。首先,“%(asctime)s”是一个*格式说明符*,而不是一个 [`Formatter` 对象](https://docs.python.org/3/library/logging.html#formatter-objects),并且它本身不进行转换,而是它内部的字符串进行转换。此外,还有一个指向该文档的过时版本的链接。您可以检查[修订历史记录](https://stackoverflow.com/posts/63862749/revisions)以准确了解更改的内容。 (2认同)
  • @wjandrea 非常感谢您的编辑!我很感激! (2认同)