【问题标题】:How to use digit separators for Python integer literals?如何为 Python 整数文字使用数字分隔符?
【发布时间】:2016-07-01 23:58:08
【问题描述】:

有没有办法在 Python 代码中对数字进行分组以提高代码的易读性?我尝试过'_,它们是其他一些语言的digit separators,但无济于事。

一个奇怪的操作符将它的左手边和右手边连接起来也可以解决。

【问题讨论】:

  • 你能说得更具体点吗..举个例子?
  • 我想他想用 31_415_926 代替整数文字 31415926,例如。
  • 我不确定是否已实现。有提案,但没有实现
  • int('100,000'.replace(',', '')) 可以吗?
  • Guido 在今年的 pycon 主题演讲中提到了这一点 youtu.be/YgtL4S7Hrwo?t=428,它即将在 3.6 中推出

标签: python literals


【解决方案1】:

几年后更新:Python 3.6 现在支持PEP515,因此您可以使用 _ 来提高浮点和整数字面量的可读性。

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1_1000
11000
>>>

历史参考可以看严格定义的词法分析python2.7,python3.5...

对于 python3.6.0a2 及更早版本,您应该会收到类似于以下内容的错误消息:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1_000
  File "<stdin>", line 1
    1_000
        ^
SyntaxError: invalid syntax
>>> amount = 10_000_000.0
  File "<stdin>", line 1
    amount = 10_000_000.0
                      ^
SyntaxError: invalid syntax

【讨论】:

    【解决方案2】:

    目前 Python 中没有千位分隔符,但您可以使用 locale 模块将带有此类分隔符的字符串转换为 int:

    import locale
    locale.setlocale(locale.LC_ALL, '')
    locale.atoi("1,000,000")
    

    【讨论】:

      【解决方案3】:

      Python中没有这个功能,但建议以后集成。

      你可以在PEP515看到提案。

      【讨论】:

        【解决方案4】:

        我在python中看到的最接近的东西是12 * 1000 * 1000,这并不理想,但如果需要12000000,它会很有用。但请注意,在 C 中,这些是等效的,因为在编译时它将两者转换为相同的东西,python 可能不会共享此优化。

        【讨论】:

        • 如果它们是文字,python 将折叠常量。但它不会对符号进行任何折叠。
        • 对于 1200 万,我会使用并推荐 12e6
        • @ThoAppelsin -- 嗯,这取决于你希望你的值是 float 还是 int...
        • @TemporalWolf -- 你总是可以通过反汇编源码来检查这些东西:dis.dis(lambda : 100 * 200 * 300)
        • @mgilson:碰巧,这是顺序很重要的事情之一。如果你使用x * 100 * 1000 * 1000,那么它不会折叠(因为如果x 不是intx * 100 可能不会返回int)。但是100 * 1000 * 1000 * x 会折叠,因为从左到右的评估是使用已知常量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多