Python中简化if条件为单行return语句结果异常问题求助
问题解析:两个xyz_there函数执行结果不同的原因
先看测试代码及运行结果:
str = "abcxyz" def xyz_there(str): for i in range(len(str)): return (str[i:i+3] == 'xyz' and str[i-1] != '.') return False def xyz_there2(str): for i in range(len(str)): if str[i:i+3] == 'xyz' and str[i-1] != '.': return True return False print(xyz_there(str)) # 输出 False print(xyz_there2(str)) # 输出 True
核心差异分析
xyz_there函数的问题:
循环只执行第一次迭代(i=0)就直接返回结果:str[0:3]是"abc",和"xyz"不相等,str[i:i+3] == 'xyz'结果为False;str[i-1]即str[-1]是字符串最后一个字符'z',不等于.,结果为True;- 整个表达式是
False and True,最终返回False,循环根本没机会检查到i=3(也就是"xyz"实际出现的位置)。
xyz_there2函数的逻辑:
循环会逐个检查每个i,只有当条件str[i:i+3] == 'xyz' and str[i-1] != '.'成立时,才返回True;遍历完所有i都没符合条件的情况,才返回False。当i=3时,str[3:6]是"xyz",且str[2]是'c'不等于.,条件满足,所以返回True。
关于"return(condition)"写法的误区
这种写法只适用于单次判断就需要返回结果的场景,但这里需求是遍历字符串找到第一个符合条件的位置,所以不能在循环第一次迭代就直接返回,必须先判断条件是否成立,成立才返回,否则继续循环。
内容的提问来源于stack exchange,提问作者Pat Loranger
相关产品推荐
相关产品推荐

