如何在Python整数字面量中使用数字分隔符?

48
有没有办法在Python代码中对数字进行分组以提高代码可读性?我尝试使用了一些其他语言的数字分隔符,如'_,但都不起作用。
可以尝试使用一个奇怪的运算符,它将其左侧与右侧连接起来。

你能具体一点吗?可以举个例子吗? - joel goldstick
3
我认为他想用31_415_926来替换整型字面值31415926,比如说。 - Prune
我不确定那个已经被实现了。有一些提案,但是还没有实现。 - Andrew Li
1
int('100,000'.replace(',', '')) 可以吗? - Nizam Mohamed
1
Guido在今年的PyCon主题演讲中提到了这一点,可以在 https://youtu.be/YgtL4S7Hrwo?t=428 观看,它将在3.6版本中发布。 - Padraic Cunningham
我认为链接足以说明清楚。Prune给出的例子非常适合。 - Utkan Gezer
4个回答

55

几年后的更新: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.7python3.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

5

目前Python中没有千位分隔符,但是你可以使用locale模块将带有这种分隔符的字符串转换为整数:

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

3

Python中没有这样的功能,但未来有计划将其整合。

您可以在PEP515中查看该提议。


2

在Python中,最接近的东西是12 * 1000 * 1000,虽然不理想,但如果需要12000000,它还是有用的。请注意,尽管在C语言中这两种写法是等价的,因为编译时会将它们都转换为同一件事,但Python可能不会共享此优化。


1
如果它们是字面常量,Python 将折叠这些常量。但它不会对符号进行任何折叠。 - mgilson
谢谢。我以为会这样,但是我不想传播错误的信息。 - TemporalWolf
2
对于1200万,我会使用并推荐12e6 - Utkan Gezer
5
嗯,这取决于你想让你的值是“float”还是“int”... - mgilson
4
@TemporalWolf -- 你可以通过解反汇编源代码来检查这些内容:dis.dis(lambda : 100 * 200 * 300) - mgilson
3
恰巧,这是其中一个顺序非常重要的事情。如果使用 x * 100 * 1000 * 1000,那么它不会折叠(因为如果 x 不是 int 类型,x * 100 可能不会返回 int)。但是 100 * 1000 * 1000 * x 就可以折叠,因为从左到右的计算顺序使用已知的常量。 - ShadowRanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接