为什么一个字符串乘以负整数的结果是空字符串?

7
'0424242' * -5

我了解字符串乘法的基本原理,但是我刚刚发现这个奇怪的事实,即用负数相乘会得到一个空字符串,我觉得这很有趣。我想知道更深层次的原因。

有没有人能够对此作出好的解释呢?


2
你会如何定义负数与字符串相乘? - Paulo Bu
你不能拥有负数个某物。空字符串或None听起来像是一个有效的结果。 - Hunter McMillen
1
我想当你执行 string * int 时,内部会有一个循环来构建结果字符串,但它的初始条件不会被满足。类似这样:string operator* (string lhs, int rhs){retStr="";for(int i = 0; i < rhs; i++){retStr += lhs;} return retStr;} - Red Alert
2
@HunterMcMillen 有很多东西可以用负整数进行有意义的建模。也许字符串不在其中,但你的笼统陈述暴露了一种古老的数学思维方式。 - user395760
@delnan 不管我使用了多么模糊的词语“something”,这个声明都是针对上述问题而言的。 - Hunter McMillen
4个回答

9

关于s * n的文档中写道:

n的值小于0时,将其视为0(这将产生与s相同类型的空序列)。


3

将字符串乘以负整数会得到什么结果?

另一方面

# Display results in nice table
print(keyword1, " "*(60-len(keyword1)), value1)
print(keyword2, " "*(60-len(keyword2)), value2)

当关键词长度超过60时,无需担心,这非常方便。


2
这种行为可能是为了与range(-5)的结果[]保持一致。事实上,后者可能正是导致您观察到的行为的根本原因。

对的,在实现中可能有一个 for i in range(num_copies)(或 C 语言等价)的循环,如果传入负数则根本不会执行。 - dan04
1
@dan04,这种推理是本末倒置。代码可能确实看起来像那样,但只是因为决定(出于任何原因)负数应该导致空字符串。如果没有人考虑过这个问题,做出决策,实施并记录下来,我们会更糟糕,代码可能会有其他错误。 - user395760

2
这是操作的字面上的一部分 定义
乘法运算符 * 返回其参数的乘积。参数必须都是数字,或者一个参数是整数,另一个参数是序列。在前一种情况下,数字被转换为公共类型,然后相乘。在后一种情况下,执行序列重复;负的重复因子会返回一个空序列。

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