2010-08-21 94 views
0

为什么下面的代码打印出“无”以及我发现没有找到匹配时写的内容?Python正在打印比我想要的更多的东西

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

回答

4

因为在每个函数的末尾都有一个隐含的return None。这意味着当你不返回任何东西时,如你的例子的else块,你的函数总是返回None。所以,subStringMatchExact("banana","x")返回None并打印。

9

让我们来看看这个。

print subStringMatchExact("banana","x") 

subStringMatchExact返回( “香蕉”, “X”)什么样的价值?不要看它是什么。看看它是什么返回。有关函数返回的提示,请阅读return声明。他们全部。如果returnreturn上没有值,则返回None

print对此值有什么影响?

+0

大家好, TNX的小费! 更好地获得基本的权利:) tnx再 巴巴 – raoulbia 2010-08-21 23:09:07

+0

“Tnx”是什么意思? – 2010-08-21 23:16:50

+0

@S。洛特:我相信这是'thanx'的简称 – 2010-08-22 00:43:16

2

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

这就是为什么你会得到你的结果。语句print正在打印函数的返回值,无论采用if的哪个分支。如果函数在没有显式返回值的情况下退出,则返回None

1

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

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可以不用担心如何处理空表做(即打印已不存在,抛出错误等。)

+0

-1您的答案的最后四行可以简单地用'return list'替换 – 2010-08-22 00:38:26

+0

用“返回列表”替换最后四行 – joshaidan 2010-08-22 02:59:33

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' 
+1

甚至“raise SomeError('no match found')” – viraptor 2010-08-22 01:15:15

0

您正在使用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") 
相关问题