Разделите ваш анализ на два дискретных результата регулярного выражения: маленький результат с 10 значениями и большой результат с 10 000 000 значений.Этот вопрос о среднем len()
из match
, столько же, сколько о len()
из csvfile
.
с небольшим повторным результатом - 10 байтов
1-йкодовый блок будет иметь более медленное время выполнения и относительно низкое использование памяти .
2-й кодовый блок будет иметь более быстрое время выполнения, а также относительно низкое использование памяти .
С большим результатом re - 10 000 000 байтов
1-й кодовый блок будет работать медленнее, а очень мало использование памяти.
2-й кодовый блок будет иметьболее быстрое время выполнения и очень большое использование памяти.
Итог:
Если предполагается построить функцию с учетом времени выполнения и памяти, тогда функция yieldбезусловно, лучший путь, когда проблема требует масштабируемого решения с различными размерами результатов.
Еще один вопрос о масштабируемости: что, если результат равен None?Я бы немного изменил код ниже:
def each_sentence(text):
match = re.match(r'[0-9]+', text)
if match != None:
num = int(text[match.start():match.end()])
if sympy.isprime(num) == False:
yield text.strip()
with open("./file_testing.csv") as csvfile:
for line in csvfile:
for text in each_sentence(line):
print(text)