【问题标题】:String Formatting in Python %iPython %i 中的字符串格式
【发布时间】:2018-12-17 10:22:29
【问题描述】:

我必须将代码从 Python2.x 转换为 Python3(主要是字符串格式) 我遇到了这样的事情:

Logger.info("random String %d and %i".format(value1, value2))

现在,我知道 %d 可以替换为 {:d} 但找不到等效的 %i(已签名) 使用 {:i} 会出现以下错误:

ValueError:“int”类型对象的未知格式代码“i”

【问题讨论】:

标签: python python-3.x string-formatting


【解决方案1】:

在 Python 中,%d%i 没有区别,所以你可以用同样的方式翻译它们。 %i 的存在只是为了与其他语言的printf 函数兼容。

【讨论】:

    【解决方案2】:

    简短的回答:Python3 str.format() 规范已放弃对“i”(%i 或 {:i})的支持。它只使用“d”(%d 或 {:d})来指定整数。因此,您可以简单地将 {:d} 用于所有整数。

    长答案:对于输出,即对于 printf 或日志记录,%i 和 %d 在 Python 和 C 中实际上是相同的。有区别,但只有当您使用它们来解析输入时,例如 scanf ()。对于 scanf,%d 和 %i 实际上都表示有符号整数,但 %i 如果前面有 0x 则将输入解释为十六进制数,如果前面有 0 则将输入解释为八进制数,否则将输入解释为十进制数。因此,对于正常使用,最好使用 %d,除非您想将输入指定为十六进制或八进制。

    更多详情,请看这里的格式规范: https://docs.python.org/2/library/string.html#formatspec

    【讨论】:

      【解决方案3】:

      %i 只是 %d 的替代品,如果你想从高层次看它(从 python 的角度来看)。

      以下是 python.org 对 %i 的评价:带符号的十进制整数。

      和 %d:有符号整数十进制。

      %d 代表小数,%i 代表整数。

      但两者都是一样的,你可以同时使用。

      所以你可以用同样的方式翻译它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多