Python中两个参数的乘法运算

4

我尝试使用Python, 并且我创建了一个简短的方法:

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

通过运行mul(2,"23"),我得到了这个惊人的输出:2323 有人能解释一下吗?

1
在添加Python代码到问题时,请注意格式和缩进。 - Some programmer dude
用字符串乘以整数?真的吗? - user2665694
4
没问题,@JohnJohn2 对啊,我认为这个问题并没有什么问题。 - aIKid
为了详细说明答案,这种行为是由Python强大的类型系统引起的,如果你习惯于JavaScript的弱类型和隐式类型转换,可能会导致“奇怪”的行为。 - rlms
你期望得到什么结果?为什么? - Karl Knechtel
6个回答

12

由于你正在将一个字符串与一个整数相乘:

>>> print '23' * 2
2323

这相当于'23' + '23'

使用mul(2, int('23'))'23'转换为整数,或者只需去掉23周围的引号。

顺便说一句,在operator模块中已经存在这样的函数:

operator.mul(2, 23)

5
在你的乘法函数中,首先将输入转换为int或float,具体取决于你的要求。
def mul(x,y):
    print(int(x)*int(y))

乘法就是重复加法。在你的情况下,如果一个字符串被传递到函数中,那么它将被“加”那么多次。

此外,如果两个输入都是字符串,那么它会抛出一个错误。

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

所以最安全的方法是先将它们转换,然后再进行乘法运算。

4

字符串的乘法和数字的乘法不是相同的概念。

字符串的乘法并不会将其隐式转换为数字,即使该字符串可以被解释为数字。相反,给定的整数会重复该字符串:

>>> 'foo' * 3
'foofoofoo'

如果您的方法需要进行数字相乘,则确保只获取数字;首先使用 int()float() 将字符串转换为数字。

1

这是因为字符串不会自动转换为整数。相反,对字符串进行乘法运算将返回一个包含原始字符串多个副本的字符串。

如果您想将字符串转换为整数,必须显式地执行此操作:

int("23")

1
在Python中,* 运算符可以用于数字和序列,即可以用于乘法运算:
2*3
6

或者到重复序列
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中我们从不声明变量、参数或返回值的类型,因此运算符执行的操作取决于操作数(对象)。

0

组合条件语句、输入转换和数学运算

  • 更新multiply()函数以实现乘法或除法。
  • 单个参数为运算符,其参数为*或/运算符。
  • 默认运算符为“*”(乘法)。
  • 返回乘法或除法的结果。
  • 如果运算符不是“*”或“/”,则返回“无效运算符”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接