4

很可能是一个愚蠢的问题,但我想知道为什么 python 不能从实际上是浮点数的字符串中生成整数。

>>> int(1.0)
1
>>> int(float('1.0'))
1

>>> int('1.0')
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    int('1.0')
ValueError: invalid literal for int() with base 10: '1.0'

谁能澄清为什么不能一步完成?

4

2 回答 2

15

谁能澄清为什么不能一步完成?

引用 Python 之禅:显式优于隐式。

我想知道为什么 python 不能从实际上是浮点数的字符串中生成整数。

根据 Python 的哲学,如果一个字符串包含一个浮点数,然后您想将其转换为一个 int,那么您有责任将其拼写出来。该语言不会尝试和猜测您的意图。

于 2013-02-28T09:53:30.057 回答
7

直接来自关于int

如果 x 不是数字或给出了 base,则 x 必须是字符串或 Unicode 对象,表示以基数为基数的整数文字。

以下是基数基数中的整数文字的定义方式:

longinteger    ::=  integer ("l" | "L")
integer        ::=  decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::=  nonzerodigit digit* | "0"
octinteger     ::=  "0" ("o" | "O") octdigit+ | "0" octdigit+
hexinteger     ::=  "0" ("x" | "X") hexdigit+
bininteger     ::=  "0" ("b" | "B") bindigit+
nonzerodigit   ::=  "1"..."9"
octdigit       ::=  "0"..."7"
bindigit       ::=  "0" | "1"
hexdigit       ::=  digit | "a"..."f" | "A"..."F"

如您所见.,词汇定义中不存在。

更多关于int整数文字

还值得一提的是,您希望在静态类型语言中自然可以实现,而 Python 采用动态类型。

于 2013-02-28T09:56:33.050 回答