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