这可能是一个非常基本的问题,我应该知道这一点,但以下行如何评估为真?
>>> '' in 'spam'
True
为什么/非空字符串中的空字符串/字符如何?我在Idle for Python 2.7中尝试了这个,并且它评估为true。我从https://basarat.gitbooks.io/typescript/content/docs/types/ambient/d.ts.html第6章
的链接中找到了这个答案 0 :(得分:3)
因为in
运算符要测试成员资格,并且根据该概念,空集是所有其他集的子集。为了在这方面保持一致,in
运营商被故意设计为采取相应行动。
运营商是否参与集合成员资格测试。如果x是集合s的成员,则x in s的计算结果为true,否则为false。 x不在s中返回s中x的否定。集合成员资格测试传统上一直与序列绑定;如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员。但是,许多其他对象类型支持成员资格测试而不是序列是有意义的。特别是,词典(用于键)和集合支持成员资格测试。
对于列表和元组类型,当且仅当存在索引i使得x == y [i]为真时,y中的x才为真。
对于Unicode和字符串类型,当且仅当x是y的子字符串时,y中的x才为真。等效测试是y.find(x)!= -1。注意,x和y不必是相同的类型;因此,'u'ab'in'abc'将返回True。 空字符串始终被视为任何其他字符串的子字符串,因此“abc”中的“”将返回True。