Python 数值中的下划线是怎么回事?

发布时间:2022-08-19 12:00

Python 中下划线的用法令人叹为观止,相信你已在各种文章或教程中见识过了。在 2016 年的 3.6 版本之后,Python 还引入了一种新的语法,使得下划线也可以出现在数值中。

概要和原理
本 PEP 提议扩展 Python 的语法,使得在“字符串变成数”(number-from-string)构造器中,下划线可以作为视觉分隔符,对整数、浮点和复数字面量的数字进行分组。

这是其它现代语言的一个常见特性,有助于理解长的或者值应该被直观地分成几部分的字面量,如十六进制表示法中的字节或单词。

例子:

# grouping decimal numbers by thousands
amount = 10_000_000.0

# grouping hexadecimal addresses by words
addr = 0xCAFE_F00D

# grouping bits into nibbles in a binary literal
flags = 0b_0011_1111_0100_1110

# same, for string conversions
flags = int('0b_1111_0000', 2)

规范
目前的提议是在数字之间和在数字字面量的基本标识符之后,允许有一个下划线。下划线没有语义上的意义,数字字面量会被解析得就像没有下划线一样。

字面量语法
因此,整型字面量的表示法看起来像这样:

integer: decinteger | bininteger | octinteger | hexinteger
decinteger: nonzerodigit (["_"] digit)* | "0" (["_"] "0")*
bininteger: "0" ("b" | "B") (["_"] bindigit)+
octinteger: "0" ("o" | "O") (["_"] octdigit)+
hexinteger: "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit: "1"..."9"
digit: "0"..."9"
bindigit: "0" | "1"
octdigit: "0"..."7"
hexdigit: digit | "a"..."f" | "A"..."F"

浮点数和复数的字面量:

floatnumber: pointfloat | exponentfloat
pointfloat: [digitpart] fraction | digitpart "."
exponentfloat: (digitpart | pointfloat) exponent
digitpart: digit (["_"] digit)*
fraction: "." digitpart
exponent: ("e" | "E") ["+" | "-"] digitpart
imagnumber: (floatnumber | digitpart) ("j" | "J")

构造函数
遵循相同的放置规则,下划线可以在以下构造函数中使用:

  • int()(任意进制)
  • float()
  • complex()
  • Decimal()

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号