Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么str.find在没有找到子字符串时返回-1?_Python_String - Fatal编程技术网

Python 为什么str.find在没有找到子字符串时返回-1?

Python 为什么str.find在没有找到子字符串时返回-1?,python,string,Python,String,在另一个例子中,一些用户提出了以下想法 word = s[:s.find(' ')] 只要字符串s包含空格,它就会工作。虽然如果它不包含一个,那么它会自动失败 s = 'foo' word = s[:s.find(' ')] # 'fo' 这是因为当未找到子字符串时,str.find返回-1 这似乎是一个奇怪的设计选择,原因如下 -1实际上是一个正确的索引 解释为bool,在 上下文 None似乎是一个更好的候选者(并且可以使上述代码正常工作) 在没有找到子字符串的情况下,为什么选择-1作为

在另一个例子中,一些用户提出了以下想法

word = s[:s.find(' ')]
只要字符串
s
包含空格,它就会工作。虽然如果它不包含一个,那么它会自动失败

s = 'foo'
word = s[:s.find(' ')] # 'fo'
这是因为当未找到子字符串时,
str.find
返回
-1

这似乎是一个奇怪的设计选择,原因如下

  • -1
    实际上是一个正确的索引

  • 解释为
    bool
    ,在 上下文

  • None
    似乎是一个更好的候选者(并且可以使上述代码正常工作)


  • 在没有找到子字符串的情况下,为什么选择
    -1
    作为
    str.find
    的返回值而不是
    None
    ,这有什么好的设计原因或用例吗?

    看起来像是泄露的C/C++API。我也有这样的印象,但我觉得CPython开发人员总体上做出了非常好的设计选择,特别是自从Python3以来,我很惊讶,不知道我是否错过了一个好的用例。不确定你会从任何邮件存档中得到一个明确的答案,但这里是关于
    str.find
    @miradulo这就是我想要的信息,谢谢you@Olivier没问题。我记得有一次,我在源代码中翻找一条注释,其中包含-1对无的推理,但没有找到任何结果。