我是Python的初学者。我尝试了以下代码。但是,我无法弄清楚为什么它没有做到"因为"在我的函数中循环。
from __future__ import print_function
import matplotlib.pyplot as plt
import numpy as np
import os
import sys
import tarfile
from IPython.display import display, Image
from scipy import ndimage
from sklearn.linear_model import LogisticRegression
from six.moves.urllib.request import urlretrieve
from six.moves import cPickle as pickle
def checkOverlap( sample, setToTest):
errorThresh = 0.0001
dataShape = setToTest.shape
numOfIms = dataShape[0]
print('Number of arrays:' numOfIms)
#How come it does not do the following loop?
for idx2 in range(numOfIms):
print('Iteration: ',idx2)
im = setToTest[idx2,:,:]
err = np.subtract(sample,im)
errAbs = np.abs(err)
maxErr = np.max(errAbs)
if maxErr < errorThresh:
# print('Image Idx: ', idx,' is overlapping image with maxErr = ', maxErr)
plt.figure(3)
plt.imshow(errAbs)
plt.draw()
return True, idx2
else:
# print('Image Idx: ', idx,' is not overlapping image with maxErr = ', maxErr)
return False, idx2
setToTest= np.ndarray((10,2,2), dtype=np.int32)
sample = np.ndarray((2,2), dtype = np.int32)
checkOverlap(sample,setToTest)
输出如下:
数组数量:10
迭代:0
你可以告诉我我错过了什么吗?谢谢。
答案 0 :(得分:1)
因为你在第一次迭代期间返回,无论如何。我认为你应该重新考虑你的逻辑并首先从if..else中删除return语句。
答案 1 :(得分:1)
在循环中间有一个if,else语句,每个语句都有一个return语句。这意味着你的循环只运行一次,然后你将返回一个值,停止循环。