Python正在打印超出我想要的内容

时间:2010-08-21 21:24:36

标签: python

为什么下面的代码打印'None'以及我在没有找到匹配时告诉它写的内容?

def subStringMatchExact(target,key):
    list=[]
    for fsi in range (len(target)):
        if key==target[fsi:fsi+len(key)]:
            list=list+[fsi,]
            #return list
    if list!=[]:
        return list
    else:
        print 'no match found'

print subStringMatchExact("banana","x")

7 个答案:

答案 0 :(得分:9)

让我们来看看。

print subStringMatchExact("banana","x")

subStringMatchExact(“香蕉”,“x”)返回的值是多少?不要看它做什么。看看返回的内容。有关函数返回的提示,请阅读return语句。他们都是。如果returnreturn没有值,则会返回None

print对该值的作用是什么?

答案 1 :(得分:4)

因为每个函数末尾都有一个隐式return None。这意味着当您不返回任何内容时,例如在示例的else块中,您的函数仍会返回None。因此,subStringMatchExact("banana","x")会返回None并打印出来。

答案 2 :(得分:2)

想想这里else子句中发生的事情。在if子句中,函数返回一个值。在else子句中,它返回了什么?

这就是为什么你得到的结果。 print语句正在打印函数的返回值,无论if的哪个分支被占用。如果函数退出而未显式返回值,则返回None

答案 3 :(得分:1)

每当您没有从Python中的函数显式返回值时,将隐式返回None 通过打印subStringMatchExact函数的返回值,即使找不到匹配项,也会得到None,因为else子句不会以return结束流程声明。

答案 4 :(得分:1)

使用返回'找不到匹配项'而不是打印'找不到匹配项

def subStringMatchExact(target, key):
    if key in target:
        n_target  = len(target)
        n_key = len(key)
        return [n for n in xrange(n_target) if key == target[n:n + n_key]]   
    else:
        return 'no match found'

答案 5 :(得分:0)

尝试这样的事情:

def subStringMatchExact(target,key):
    list=[]
    for fsi in range (len(target)):
        if key==target[fsi:fsi+len(key)]:
            list=list+[fsi,]
            #return list
    return list

这样你总是返回一个列表,调用subStringMatchExact的代码可以担心如何处理空列表(即找不到打印,抛出错误等)。

答案 6 :(得分:0)

您正在使用print语句来打印函数返回的内容。因此,在“else”情况下,您需要返回而不是在函数中打印。

因此,正确的代码是:

def subStringMatchExact(target,key):
    list=[]
    for fsi in range (len(target)):
        if key==target[fsi:fsi+len(key)]:
            list=list+[fsi,]
            #return list
    if list!=[]:
        return list
    else:
        return 'no match found'

print subStringMatchExact("banana","x")