2013-02-28 23 views
4

在所有可能性中都是一个愚蠢的问题,但我想知道为什么python不能从实际上是浮点数的字符串中构造一个整数。作为浮点数的字符串的Python int()

>>> 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' 

任何人都可以解释,为什么它不能在一个步骤做什么?

回答

7

直约int文档:

如果x不是数字或如果基给出,则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" 

正如你所看到.没有出现在词汇的定义。

更多intinteger literals

另外值得一提的是,你的愿望是在static typing自然语言实现的,而Python采用dynamic typing

+1

你确定这是相关的吗?你引用了Python语法的规则,这些规则并不完全对应'int'函数接受的参数。 – Kos 2013-02-28 10:00:35

+3

@Kos我引用了一个整数字面量。 'int'接受代表**整数字面值的数字或字符串/ unicode对象** – dmg 2013-02-28 10:04:36

+0

谢谢,我读过,这确实是文档所说的 – Kos 2013-02-28 11:20:06

15

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

引述的Python禅:Explicit is better than implicit.

我想知道为什么Python不能做出来一个字符串,它实际上是一个浮点数的整数。

符合Python的哲学,如果一个字符串包含一个浮点数,然后你想变成一个int,那么你有责任拼出来。该语言不会尝试和猜测你的意图。

+5

+1的哲学回答一个哲学问题 – Kos 2013-02-28 09:56:22

+0

我相意思它如何存储在内存/硬件:) – 2013-02-28 09:57:11

+2

@TapajitDey:这个问题与如何在内存/硬件中存储无关。不允许这种隐式转换的选择是Python的设计人员慎重决定的。 – NPE 2013-02-28 09:58:22