繁体   English   中英

Python的打印量超出了我的期望

[英]Python is printing more than I want

为什么在找不到匹配项的情况下,下面的代码显示“无”以及我告诉它写的内容?

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")

让我们看看这个。

print subStringMatchExact("banana","x")

subStringMatchExact (“ banana”,“ x”)返回什么值? 不要看它什么。 看看它返回什么。 有关函数返回内容的提示,请阅读return语句。 他们全部。 如果return值没有值或没有return ,则返回None

print用那个值做什么?

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

想一下在else子句中会发生什么。 if子句中,您的函数返回一个值。 else子句中,它返回什么?

这就是为什么您得到自己的结果。 无论使用if哪个分支, print语句都将打印函数的返回值。 如果函数退出而没有显式返回值,则返回None

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

使用return'找不到匹配项',而不是打印'找不到匹配项'

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'

尝试这样的事情:

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的代码可能会担心如何处理空列表(即找不到打印,抛出错误等)。

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

因此,正确的代码是:

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM