Brutus1
@Brutus1

Как вызывать завершение for из другой функции?

Есть функция grab() которая выглядит примерно так:
def grab():
	"""Сбор информации о хешах"""
	for link in links:
		url = link.get('href', '-')
		image_url = link.find('img').get('src', '-')
		print(url, image_url)
		#Скачаем картинку
		filename = 'temp.png'
		r = requests.get(image_url, headers=headers)
		if r.status_code == 200:
			print('ok')
			with open(filename, 'wb') as f:
				f.write(r.content)
		for mi in range(10):
			if True:
				compare(mi,image_url,url)
			else:
				break


и в него встроена функция compare(mi,image_url,url)
она выглядит так:
def compare(mi,image_url,url):
	"""Сравнивает картинки, принимает индекс mi"""
	if np.allclose(img, img2):
		print("Подходит!")
		global hashes
		hashes[mi] = image_url
	else:
		print("Дальше!")
		#time.sleep(0.2)


и так, вопрос в том, чтобы если вышло сообщение Подходит!
нужно досрочно завершить выполнениеfor mi in range(10) которая внутри grab()
но как это передать через compare()?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Интересная конструкция
if True:
        compare(mi,image_url,url)
else:
        break


def grab():
  """Сбор информации о хешах"""
  for link in links:
    url = link.get('href', '-')
    image_url = link.find('img').get('src', '-')
    print(url, image_url)
    #Скачаем картинку
    filename = 'temp.png'
    r = requests.get(image_url, headers=headers)
    if r.status_code == 200:
      print('ok')
      with open(filename, 'wb') as f:
        f.write(r.content)
    
    success = False
    for mi in range(10):
        success = compare(mi,image_url,url)
        if success:
            break

def compare(mi,image_url,url):
  """Сравнивает картинки, принимает индекс mi"""
  if np.allclose(img, img2):
    print("Подходит!")
    global hashes
    hashes[mi] = image_url
    return True
  else:
    print("Дальше!")
    #time.sleep(0.2)
    return False
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы