【问题标题】:How are booleans formatted in Strings in Python?Python中的字符串如何格式化布尔值?
【发布时间】:2011-01-16 14:01:11
【问题描述】:

我知道我做不到:

"%b %b" % (True, False)

在 Python 中。我猜%b 是 b(oolean)。有这样的吗?

【问题讨论】:

  • 你想要的结果是什么?真假?那你想要'%s'。 %b,当它存在时,用于二进制(如在 base-2 中)。
  • 嘿,是的! “%s”似乎工作得很好。回答这个问题并得到一个选择的答案。我曾经做过“%s”% str(False)。真丢脸:)
  • 相关文档链接:docs.python.org/library/…

标签: python boolean string-formatting


【解决方案1】:

参考Python string interpolation

在 Python 3.6 中,字符串插值被添加了一个新的字符串字面量 f 前缀

shouldBeTrue = True
print(f"shouldBeTrue={shouldBeTrue}")

【讨论】:

    【解决方案2】:

    要为 Python-3 更新这个,你可以这样做

    "{} {}".format(True, False)
    

    但是,如果您想实际格式化字符串(例如添加空格),您会遇到 Python 将布尔值转换为底层 C 值(即 int),例如

    >>> "{:<8} {}".format(True, False)
    '1        False'
    

    要解决这个问题,您可以将True 转换为字符串,例如

    >>> "{:<8} {}".format(str(True), False)
    'True     False'
    

    【讨论】:

      【解决方案3】:

      你也可以使用Formatter class的字符串

      print "{0} {1}".format(True, False);
      print "{0:} {1:}".format(True, False);
      print "{0:d} {1:d}".format(True, False);
      print "{0:f} {1:f}".format(True, False);
      print "{0:e} {1:e}".format(True, False);
      

      这些是结果

      True False
      True False
      1 0
      1.000000 0.000000
      1.000000e+00 0.000000e+00
      

      某些% 格式类型说明符(%r%i)不可用。详情见Format Specification Mini-Language

      【讨论】:

      • 请注意添加格式选项can screw this up. E.g. {:_^5} 会得到你 '__1__' 除非你 str(...) 布尔值。
      • 你可以get around!s这样的类型转换问题:'{!s:_^5}'.format(True)'True_'
      【解决方案4】:

      如果你想True False 使用:

      "%s %s" % (True, False)
      

      因为str(True)'True'str(False)'False'

      或者如果你想1 0 使用:

      "%i %i" % (True, False)
      

      因为int(True)1int(False)0

      【讨论】:

        【解决方案5】:
        >>> print "%r, %r" % (True, False)
        True, False
        

        这并不特定于布尔值 - %r 在参数上调用 __repr__ 方法。 %s(对于str)也应该可以工作。

        【讨论】:

        • %r%s 的主要区别是什么?
        • 我一直有这个区别,但如果我错了,请纠正我。 %s(因此 str())旨在为人类尽可能透明地表示对象。 %r(因此 repr())旨在为 python 尽可能透明地表示对象。例如,print(str("foo")) 仅在新行上打印 fooprint(repr("foo")) 但是在新行上打印 'foo',包括引号,因为这是您需要在 python 解释器中键入的内容,以获取 python 中参数的相应对象。
        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 2021-11-05
        • 1970-01-01
        • 2018-11-05
        相关资源
        最近更新 更多