Python的int()是一个浮点数的字符串

Tap*_*Dey 4 python

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

>>> int(1.0)
1
>>> int(float('1.0'))
1
Run Code Online (Sandbox Code Playgroud)

>>> 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'
Run Code Online (Sandbox Code Playgroud)

任何人都可以澄清为什么不能一步完成它?

NPE*_*NPE 15

任何人都可以澄清为什么不能一步完成它?

引用Python的Zen:显式优于隐式.

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

根据Python的理念,如果一个字符串包含一个浮点数,然后你想把它变成一个int,你就有责任拼出来.语言不会试图猜测你的意图.

  • +1对哲学问题的哲学回答 (5认同)
  • @TapajitDey:这个问题与内存/硬件中存储的内容无关.不允许这种隐式转换的选择是Python设计者的慎重决定. (2认同)

dmg*_*dmg 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"
Run Code Online (Sandbox Code Playgroud)

正如你所看到.的那样,词汇定义中没有.

更多关于int整数文字

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

  • @Kos我引用的是整数文字.`int`接受一个数字或一个表示**整数文字的字符串/ unicode对象** (3认同)