Цикл
Python for
- это не цикл C for
, а действительно foreach
цикл.В вашем примере:
for i in range(0, len(data), chunk_sz):
range()
вызывается только один раз, затем python выполняет итерацию возвращаемого значения (list
в python2, итерируемый объект range
в python3).IOW, из этого POV ваши фрагменты эквивалентны - разница в том, что второй фрагмент использует нелокальную переменную length_of_file
, так что вы на самом деле получаете снижение производительности при ее разрешении.
Яиз фона C / C ++, где вычисления в каждом повторении в цикле while или for - плохая практика, потому что он выполняется для каждого вызова
За исключением возможных оптимизаций возможной компиляции, это верно для большинства, если не для всех языков.
Это, как говорится и как уже упоминалось в комментариях или ответах: это не то, как вы читаете файл кусками - вам нужен первый фрагмент SurajM.