for循环中的python调用函数和函数包含if else结构

时间:2017-03-08 20:12:32

标签: python loops if-statement

我有以下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时,只打印字符串。

感谢

2 个答案:

答案 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)