Python 将字符串乘以零

Python 将字符串乘以零,python,string,computer-science,Python,String,Computer Science,在计算机科学方面,特别是在Python中,如何解释将字符串乘以零(即int)生成空字符串 >>> 'hello' * 0 >>> '' 按照以下顺序操作: 'hello' * 3 == 'hellohellohello' 'hello' * 2 == 'hellohello' 'hello' * 1 == 'hello' 'hello' * 0 == ? 空字符串是唯一一个继续序列的东西,因此它要么是空字符串,要么是未定义的。它可以理解为“字符串的零重复'

在计算机科学方面,特别是在Python中,如何解释将字符串乘以零(即int)生成空字符串

>>> 'hello' * 0
>>> ''
按照以下顺序操作:

'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中的字符串乘法只要涉及负数,就不是分布的。但是通过定义
s*0
来排除
0
也是违反直觉的。

*
运算符是乘法,
+
运算符是加法。对于数字类型,我们通常期望
n*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
定义为空字符串。

您可以将其解释为由长度
len('hello')*0
'hello'
的重复内容组成的字符串。唯一符合这个定义的字符串是
'
:就是那个导致我发布问题的“未定义”字符串。我需要一个更“绝对”的答案。@palindrome:你是什么意思?如果GvR选择定义
'hello'*0
没有结果,而是抛出异常,那么情况就是这样。没有“绝对”答案,Python是一个人发明的。+1我正忙着写基于乘法分布于加法的答案。然后,当我提交并抽出时间更新您的时,我发现您在某种程度上领先于我。我只是想让你知道我没有模仿你@AshwiniChaudhary我知道。。。显然,
'hello'
*-2应该是
'olleholleh'
。。。(你们知道我在开玩笑吧,伙计们!?)@JonClements:Nah,显然
'hello'*-2
应该是10个退格字符!