2013-11-01 96 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中声明变量,参数或返回值的类型。