2013-11-01 95 views
3

我試圖用Python和我創建了一個短方法:乘法蟒蛇

def mul(x,y): 
    print(x*y) 

運行mul(2,"23"),我得到這個出色的輸出:2323

有人能解釋這個?

+1

將Python代碼添加到問題時,請注意格式和縮進。 –

+0

用字符串muliply int?當真? –

+3

@ JohnJohn2是的,真的。我認爲這個問題沒有任何問題。 – aIKid

回答

10

因爲你乘以字符串和一個整數在一起:

>>> print '23' * 2 
2323 

即相當於'23' + '23'

mul(2, int('23'))'23'轉成一個整數,或者只是擺脫圍繞在23周圍的引號。

順便說一句,這樣的功能已經存在的operator模塊:

operator.mul(2, 23) 
1

這是因爲字符串不會被自動轉換爲整數。相反,與字符串相乘會返回一個包含原始字符串多個副本的字符串。

如果你想將一個字符串轉換爲整數,你必須明確地做到這一點:

int("23") 
3

串的乘法是不一樣的事情,數乘法。

字符串倍增確實隱式轉換爲數字,即使串可以作如此解釋。相反,該字符串是重複的,給出的整數:

>>> 'foo' * 3 
'foofoofoo' 

如果你的方法需要乘號,然後確保你得到的只有數;請使用int()float()先將字符串轉換爲數字。

4

在您的乘法函數中,首先根據您的要求將輸入轉換爲int或float。

def mul(x,y): 
    print(int(x)*int(y)) 

多重複制只不過是重複的加法。 在你的情況下,如果一個字符串傳遞給你的函數,那麼它會被多次「添加」。

另外,如果兩個輸入都是字符串,那麼它會拋出一個錯誤。

TypeError: can't multiply sequence by non-int of type 'str' 

因此,在乘法之前首先轉換它們是最安全的。

1

在Python *中,操作符可以對數字和序列進行操作i。,電子或者乘以數字:

2*3 
6 

repeat sequences

2*'3'  #string 
'33' 
[4,6]*2  #list 
[4, 6, 4, 6] 
(4,8)*2  #tuple 
(4, 8, 4, 8) 
#won't work with sets ([set type][2]) and dictionaries ([mapping type][3]) 

這是由於,爲了由操作者進行的操作的事實,取決於操作數(對象)作爲我們從未在Python中聲明變量,參數或返回值的類型。