![](/img/trans.png)
[英]Python vs Javascript floating point arithmetic giving very different answers. What am I doing wrong?
[英]What is an (int) prefix on floating point arithmetic actually doing?
在一些示例代碼中,我看到使用了這種語法:
float1 = 7.0
float2 = 2.0
result = (int)(float1/float2)
關鍵似乎是強制結果為整數,但我找不到任何記錄正在使用的(int)
語法的地方,或者為什么它更適合int(float1/float2)
。 對int()本身的調用應該返回零,但是(0)(float1/float2)
拋出一個TypeError並且抱怨零不是可調用的。 很明顯,解釋器正在嘗試執行int()引用,但是我不清楚它為什么會在那里找到可調用的東西。
有人能指點我這個語法的一些文檔嗎?
編寫該代碼的人過多地接觸過比C更密切相關的語言而不是Python。 在C,C ++,Java,C#等中, (int)something
是將something
為(int)
的語法。 在Python中,它只是一種拼寫int(something)
的奇怪方式。 int
是內置函數,它將something
轉換為int
。
通常,其他表達式<expr>
的Python表達式(<expr>)
的計算結果與<expr>
相同。 parantheses只能影響優先級,但在這種情況下它們不會。 同樣, <expr>(...)
計算<expr>
然后調用結果 - 注意<expr>
可以再次是任何表達式,它不僅限於簡單的函數名。
(x)(y)
與x(y)
相同。 (int)(y)
有效,因為int(y)
有效。 (0)(y)
不是因為0(y)
不起作用。
在這段代碼中: result = (int)(float/float2)
(int)
是一個被賦值的表達式,用於返回int
函數。 然后使用單個參數調用,表達式為float/float2
。
它對於(0)
不起作用,因為該表達式的結果是一個數字,它不是可調用類型,與TypeError
狀態完全相同。
(int)
求值為int
,所以
result = (int)(float/float2)
是相同的
result = int(float/float2)
不建議在裸變量名稱周圍放置不必要的括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.