将字符串乘以零

 我爱左_470 发布于 2023-02-13 15:31

在计算机科学方面,特别是在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为其他任何东西而排除将是相当反直觉的.

2 个回答
  • *运营商的多元化,+运营商是加法.对于数字类型,我们通常期望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应该将其定义为空字符串.

    2023-02-13 15:33 回答
  • 按照顺序:

    '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为其他任何东西而排除将是相当反直觉的.

    2023-02-13 15:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有