#Python的`for`和`while`循环支持`else`子句,#这个子句只在循环时使用terminates当没有遇到`break`语句时执行。defcontains(haystack,needle):"""如果`needle`不在`haystack`中,则抛出ValueError。"""foriteminhaystack:ifitem==needle:breakelse:#这里的`else`是##只有当循环运行到完成而没有命中`break`语句时才运行的“完成子句”。引发ValueError('未找到针')>>>包含([23,'针',0xbadc0ffee],'针')无>>>包含([23,42,0xbadc0ffee],'针')ValueError:“针notfound"#就个人而言,我不喜欢循环中的`else`“完成子句”,因为我觉得它很混乱。#我宁愿做这样的事情:defbetter_contains(haystack,needle):foriteminhaystack:ifitem==needle:returnraiseValueError('Needlenotfound')#注意:通常你会这样写进行成员资格测试,这更像Pythonic:如果针不在大海捞针中:raiseValueError('Needlenotfound')
