【问题标题】:Python String Formatting And String Multiplication OddityPython字符串格式化和字符串乘法奇数
【发布时间】:2009-08-21 01:55:41
【问题描述】:

Python 正在执行字符串乘法,我希望它执行数字乘法,但我不知道为什么。

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8

即使强制类型为整数也无济于事。 (我意识到这是多余的,但对我来说这是一个白痴检查:

 >>> print('%d' % int(2) * int(4))
 2222

显然我解决了我的问题(添加括号就可以了)但是这里发生了什么?如果这只是我必须记住的一个怪癖,那很好,但我更愿意了解这背后的逻辑。

【问题讨论】:

    标签: python string formatting operator-precedence


    【解决方案1】:

    您正在体验运算符优先级

    在 python 中,%* 具有相同的优先级,因此它们从左到右分组。

    所以,

    print('%d' % 2 * 4)
    

    与,

    print( ('%d' % 2) * 4)
    

    这里是蟒蛇operator precedence table

    由于很难记住运算符优先级规则,而且规则可能很微妙,因此在表达式中链接多个运算符时,通常最好简单地使用显式括号。

    【讨论】:

    • 接受我自己的答案没有那么优雅,所以 Karl 得到了最简洁和正确答案的检查。
    • "so they group left to right" 具体来说,这是因为 "", "%" 运算符组具有左关联性。 "*" 从右到左分组
    • “您正在体验运算符优先级。”需要去看医生吗?
    【解决方案2】:

    啊,我想我明白了。当然,就在我发布消息之后。这是一个操作顺序的事情。正在计算字符串格式,并将生成的字符串与最后一个操作数相乘。

    当我输入时:

    >>> print '%d' % 2 * 4
    2222
    

    结果好像我是这样指定优先级的:

    >>> print ('%d' % 2) * 4
    2222
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多