【发布时间】:2014-12-24 21:53:03
【问题描述】:
在 Python 中,我们可以这样做:
'a' * 4
得到'aaaa'。
我们做不到:
'a' + 4
我们首先必须将 4 转换为字符串。
这只是一个任意选择,用 String 和 Int arg 的定义重载 *,而不用 String 和 Int 重载 +?
如果我们将其定义为不执行任何隐式类型转换的语言,例如在上面的示例中它如何不将 4 转换为字符串,我试图了解这如何适合被认为是“强类型”的 Python。那么在第一个示例中,这是运算符重载的示例,而不是隐式转换?
在文档中,我找不到采用 Int 和 String 的 mul 或 * 的定义,只有采用 2 个 Int 的形式。我们如何知道存在哪些重载定义?
【问题讨论】:
-
int * str记录在 here 中,在语言参考中,而不是在库参考中。 (操作是用int和sequence来定义的,strings是一种sequence。) -
这里是more info on sequences in the Library docs,带有操作列表。
-
要回答您的其他问题,这更多地与重载有关,而不是类型定义。
+运算符对于某些序列(例如字符串)被重载以表示连接,或者对于列表追加。 -
字符串乘以字符串会得到什么?
标签: python strong-typing typing