Pull to refresh

Comments 12

Круто!

В 1С'е, хоть она и в доску паскаль, не сделали обратный цикл (downto), поэтому приходится так:

for i = -Count+1 to 0 do
  some = somearray[-i];
enddo;

хороший трюк, теперь главное не забыть когда, в следующий раз, он понадобится

В реальном коде - никогда. Отличный способ запутать потом себя и коллег.

Какой код читается лучше #1, #2 или #3?

s = 'aaa;bbb;ccc;ddd'

parts = s.split(';')
last = parts[len(parts)-1]  # 1

*_, last = s.split(';')  # 2

last = s.split(';')[-1]  # 3

Опыт показывает, что #3 очевиден, прост и удобен любому разработчику на Python. Особенно в сравнении с #1 где надо написать две строки вместо одной, а ещё посчитать длину списка. Кстати, благодаря отрицательным индексам, первый вариант будет работать с пустым списком без ошибок.

Заворачивание индексов - это просто инструмент, который надо применять там где нужно, а там где не нужно, применять не нужно. Вот и всё. Это так же как с goto, не надо слушать "фанатиков чистоты кода", а использовать, руководствуясь опытом и здравым смыслом.

Кстати, благодаря отрицательным индексам, первый вариант будет работать с пустым списком без ошибок.

С чего вдруг? Что же будет присвоено в last ?)

Этот способ может вызвать баги, которые не могли бы появиться при использовании индексации с конца. Предположим, хотим получить 5-й элемент с конца, но список оказался слишком коротким:

a = [0,1,2]
print(a[len(a) - 5])

Получаем 1 вместо ожидаемой ошибки. Если бы было написано a[-5], то мы бы получили нужную ошибку.

Не помню уже, что я хотел сказать. С пустым списком работать не будет, конечно. На пустом списке индекс -1 вызовет ошибку IndexError так же как -5 на списке из 3 элементов.

Добавляет возможность решать ребусы в чужом коде.

Интересная возможность. Соглашусь, что в реальном коде лучше не использовать такое, так как может запутать.

А интересно на больших циклах это как скажется на производительности? Или ни как?

Не должно сказаться, оператор ~ выполняется достаточно быстро.

Будет ли этот приём работать как на LSB, так и на MSB архитектурах?

Sign up to leave a comment.

Articles