2010-08-21 91 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") 
相關問題