我有以下python代码调用迭代dict的函数。 下面的代码不能按预期工作:
list1=["test1","test2","test3","test4"]
list2=["toto1","test1","test3","toto4"]
def functest(t):
for l in list2:
if t == l:
return cond1
else:
return "rien"
for t in list1:
titi=functest(t)
print titi
当我打印titi var时,我已经打印了4次toto1。
如果我删除了我的函数中的else,代码似乎可以正常工作。
如何解释这种行为?
为什么当我使用返回的字符串添加else时,只打印字符串。
感谢
答案 0 :(得分:1)
因为return
退出函数并将程序返回循环。因此,当您在循环中添加else
语句时,list1
的当前元素将与'toto1'
进行比较,输入else
语句,函数将返回"rien"
}。
def functest(t):
for l in list2:
if t == l:
return cond1
else:
return "rien" # we always end up here on the first iteration,
# when comparing against "toto1"
当您删除 else
语句时,您循环直到在list2
中找到匹配项。但是,假设您仍然希望返回"rien"
,因为list2
中没有任何元素与正在检查的list1
中的元素匹配,您应该将return语句移出循环,所以它只在检查完所有元素后返回。
def functest(t):
for l in list2:
if t == l:
return "match found"
return "rien"
<强>演示强>
>>> for t in list1:
titi=functest(t)
print (titi)
match found
rien
match found
rien
答案 1 :(得分:0)
我试图修改代码以实现您的逻辑。
list1=["test1","test2","test3","test4"]
list2=["toto1","test1","test3","toto4"]
def functest(t):
newReturnList=[]
for l in list2:
if t == l:
newReturnList.append(t+'-found')
else:
newReturnList.append(t+'-NOT found')
return newReturnList
for t in list1:
titi=functest(t)
print (titi)