将字符串乘以零

时间:2013-12-01 21:05:05

标签: python string computer-science

在计算机科学方面,特别是在Python中,如何解释将字符串乘以零(这是一个int)会产生一个空字符串?

>>> 'hello' * 0
>>> ''

2 个答案:

答案 0 :(得分:17)

按照顺序:

'hello' * 3 == 'hellohellohello'
'hello' * 2 == 'hellohello'
'hello' * 1 == 'hello'
'hello' * 0 == ?

空字符串是唯一继续序列的东西,所以它是那个或未定义的。它有意义为“字符串'hello'”的零重复。

此序列是一种寻找字符串乘法的归纳定义的方法。我们想要定义s * (n + 1) == (s * n) + s,当然我们要定义s * 1 == s。因此,当n == 0 s * 0唯一有意义的值是空字符串时。

数学上,这是因为空字符串''是附加标识。乘法的分布属性是任何字符串s和非负整数ab

s * (a + b) == s * a + s * b

b == 0,我们看到:

s * a == s * a + s * 0

因此,除非s * 0是字符串加法的标识值,否则字符串乘法不会对整数加法进行分配。

当然,没有必要仅仅因为我们称两个运算符为“乘法”和“加法”,那么它们必须是分布式的。实际上,只要涉及负数,Python中的字符串乘法就不会是分布式的。但是,通过将0定义为其他任何内容来排除s * 0也会违反直觉。

答案 1 :(得分:6)

*运算符是乘法运算,+运算符是加法运算符。对于数字类型,我们通常希望n*s等于s+s+s+...+s,其中总和中ns个副本。这说明了乘法和加法之间的典型关系。

我们可能期望乘法是分配而不是加法。那就是:

n*s + m*s == (n+m)*s

现在,假设m为零。然后这个分配规则产生:

n*s + 0*s == (n+0)*x == n*s

因此很明显0*s是加性身份。

对于字符串,加法运算符是串联。字符串连接的标识是空字符串。我们可以从中得出结论:0*s应该被定义为空字符串。