在计算机科学方面,特别是在Python中,如何解释将字符串乘以零(这是一个int)会产生一个空字符串?
>>> 'hello' * 0 >>> ''
Steve Jessop.. 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
和非负整数a
,b
:
s * (a + b) == s * a + s * b
把b == 0
,我们看到:
s * a == s * a + s * 0
因此,除非s * 0
是字符串加法的标识值,否则字符串乘法不会对整数加法进行分配.
当然,没有必要仅仅因为我们称两个运算符为"乘法"和"加法",那么它们必须是分布式的.实际上,只要涉及负数,Python中的字符串乘法就不会是分布式的.但是,0
通过定义s * 0
为其他任何东西而排除将是相当反直觉的.
该*
运营商的多元化,+
运营商是加法.对于数字类型,我们通常期望n*s
等于求和s+s+s+...+s
中的n
副本的位置s
.这说明了乘法和加法之间的典型关系.
我们可能期望乘法对于加法是分配的.那是:
n*s + m*s == (n+m)*s
现在,假设m
为零.然后这个分配规则产生:
n*s + 0*s == (n+0)*x == n*s
因此很明显,这0*s
是附加的身份.
对于字符串,加法运算符是串联.字符串连接的标识是空字符串.从中我们可以得出结论,0*s
应该将其定义为空字符串.
按照顺序:
'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
和非负整数a
,b
:
s * (a + b) == s * a + s * b
把b == 0
,我们看到:
s * a == s * a + s * 0
因此,除非s * 0
是字符串加法的标识值,否则字符串乘法不会对整数加法进行分配.
当然,没有必要仅仅因为我们称两个运算符为"乘法"和"加法",那么它们必须是分布式的.实际上,只要涉及负数,Python中的字符串乘法就不会是分布式的.但是,0
通过定义s * 0
为其他任何东西而排除将是相当反直觉的.