Budulianin
Ну вот и я о том же, поэтому лучше писать там список.
Прочитай пункт
dip3. tuplesShaman
Так же предпочтительнее квантовать код по зонам ответственности.
Есть понятие модуля, прочности модуля и сцепления модулей. Где модуль - это не файл, а такая сущность. Модулем может быть функция, может быть группа функций, может быть файл с функциями, а может быть группа таких файлов.
Так вот, если обернуть чтение данных в функцию, получится модуль.
Shaman
with open('graph.dat') as f:
data = [l.strip() for l in f]
def edges(data):
for r, rd in enumerate(data, 1):
for c, cd in enumerate(rd, 1):
if int(cd):
yield r, c
def read():
with open('graph.dat') as f:
data = [l.strip() for l in f]
return data
def edges(data):
for r, rd in enumerate(data, 1):
for c, cd in enumerate(rd, 1):
if int(cd):
yield r, c
И можно рассмотреть два модуля: чтения данных и обработки данных.
Модули должны быть независимыми. Не знать друг о друге.
Shaman
А в эту строку проник int, который знает, как были прочитаны данные. Узнал он это через устройство data, которое зависит от модуля чтения. То есть модули чтения и обработки сцеплены по формату, по формату data. Стоит измениться формату data в модуле чтения, и модуль обработки сломается.