【问题标题】:Why would I ever use anything else than %r in Python string formatting?为什么我会在 Python 字符串格式中使用除 %r 之外的任何东西?
【发布时间】:2013-06-09 12:41:04
【问题描述】:

我偶尔会使用 Python 字符串格式化。可以这样做:

print('int: %i. Float: %f. String: %s' % (54, 34.434, 'some text'))

但是,这也可以这样做:

print('int: %r. Float: %r. String: %r' % (54, 34.434, 'some text'))

以及使用 %s:

print('int: %s. Float: %s. String: %s' % (54, 34.434, 'some text'))

因此,我的问题是:为什么我会使用 %r 或 %s 以外的任何东西?其他选项(%i、%f 和 %s)对我来说似乎毫无用处,所以我只是想知道为什么每个人都会使用它们?

[编辑] 用 %s 添加示例

【问题讨论】:

  • 您根本不应该使用% 字符串格式。它已被弃用,取而代之的是新的str.format() method;另见format string syntax
  • 例如,对于字符串值,结果是不同的。对于s = 'hello\tworld'%r 给出的内容包括引号字符。但是%s 会给出类似hello world 的东西。
  • @TimPietzcker 它已被弃用,但必须撤消,因为目前没有删除它的计划
  • @kramer65 我当然推荐新格式,我只是说它仍然受支持

标签: python string-formatting


【解决方案1】:

对于浮点数,reprstr 的值可以不同:

>>> num = .2 + .1
>>> 'Float: %f. Repr: %r Str: %s' % (num, num, num)
'Float: 0.300000. Repr: 0.30000000000000004 Str: 0.3'

对字符串使用%r 会在其周围加上引号:

>>> 'Repr:%r Str:%s' % ('foo','foo')
"Repr:'foo' Str:foo"

您应该始终将 %f 用于浮点数,将 %d 用于整数。

【讨论】:

  • 好吧,我忘了 %s。刚刚将它添加到我最初的问题中。从您给出的示例中,我总是更喜欢 %s 的表示。因此,据我所知,如果我想在其中添加一些额外的格式(例如您的 %.3f 示例),我只会使用例如 %f ,对吗?
  • @kramer65 是的,您应该始终将 %f 用于浮点数,%s 可以用于整数。
【解决方案2】:

@AshwiniChaudhary 回答了您关于旧字符串格式的问题,如果您要使用新字符串格式,您将执行以下操作:

>>> 'Float: {0:f}. Repr: {0!r} Str: {0!s}'.format(.2 + .1)
'Float: 0.300000. Repr: 0.30000000000000004 Str: 0.3'

其实!s是默认的所以你不需要,最后的格式可以简单的{0}

【讨论】:

    【解决方案3】:

    与其他人一起,您可以更好地控制自己的结果。

    the docs 中,他们会准确地告诉您微调结果的方法,例如

    >>> "%x-%5x-%#5x-%05x-%#05x" % (12,12,12,12,12)
    'c-    c-  0xc-0000c-0x00c'
    

    【讨论】:

      【解决方案4】:

      如果variable 不是数字,您可以使用'%f' % variable 将引发异常的事实。

      【讨论】:

      • @kramer65 那么你应该使用'{0}'.format(num) 它适用于任何东西
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多