[英]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
。 这意味着,当您不返回任何内容时(如示例中的else
块else
,您的函数仍将返回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.