为什么下面的代码打印'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")
答案 0 :(得分:9)
让我们来看看。
print subStringMatchExact("banana","x")
subStringMatchExact
(“香蕉”,“x”)返回的值是多少?不要看它做什么。看看返回的内容。有关函数返回的提示,请阅读return
语句。他们都是。如果return
或return
没有值,则会返回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")