以下代码适用于课堂练习。我们试图找到目标字符串的最后位置:
def find_last(search, target):
count = 0
while search.find(target, count) != -1:
return search.find(target, count)
count = count +1
print find_last('aaaabbaaabbbab', 'ab')
答案应为12
,但如果我运行代码,我会得到答案3
。
但是,如果我使用此代码:
def find_last(search, target):
count = 0
while search.find(target, count) != -1:
print search.find(target, count)
count = count +1
print find_last('aaaabbaaabbbab', 'ab')
我得到了这个答案:
3 3 3 3 8 8 8 8 8 12 12 12 12 None
所以,看起来我的函数找到了正确答案12
,问题是为什么打印出3
,这是循环的第一个结果,而不是{{1}当我使用12
语句时?
答案 0 :(得分:2)
return
>> 当前函数调用表达式列表(或 无)作为返回值。
当你这样做时:
while search.find(target, count) != -1:
return search.find(target, count)
return
返回结果并终止函数find_last
的执行。
删除它,你就没事了。在循环之后不要忘记return count
。
答案 1 :(得分:1)
那是因为return
终止了当前函数并返回了值。当你到达return
并退出函数find_last
时,循环就会停在那里。
您可以将值存储在变量中并在循环之后返回,而不是在循环内返回。
答案 2 :(得分:1)
return
会丢弃当前函数中的剩余代码,并继续在调用者中执行。
要查看正在进行的操作,请运行以下命令:
def find_last(search, target):
count = 0
while search.find(target, count) != -1:
print search.find(target, count)
return search.find(target, count)
assert 0, 'unreached'
count += 1
print find_last('aaaabbaaabbbab', 'ab')
它只打印3
两次:一次在find_last
内,一次在外面。
答案 3 :(得分:0)
def find_last(search, target):
if search.find(target, 0) != -1:
count = len(search)
while search.find(target, count) == -1:
count -= 1
return search.find(target, count)
else:
return None
print find_last('aaaabbaaabbbab', 'ab')