2013-02-28 25 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