Python. Экспресс-курс | страница 25
Чтобы понять, как выразительность Python упрощает код, возьмем задачу переста-новки значений двух переменных, var1 и var2 . В таком языке, как Java, для этого потребуются три строки кода и лишняя переменная: int temp = var1;
var1 = var2;
var2 = temp;
Переменная temp необходима для хранения значения переменной var1 в то время, когда в ней хранится var2 , и последующего его сохранения в var2 . Процесс не осо-бенно сложен, но чтобы прочитать эти три строки и понять, что произошла пере-становка, даже опытному программисту придется немного поразмыслить. С другой стороны, Python позволяет выполнить ту же перестановку в одной строке, причем так, что читатель кода сразу понимает, что значения меняются местами: var2, var1 = var1, var2
Конечно, это очень простой пример, но аналогичные возможности постоянно встречаются в языке.
1.2.3. Удобочитаемость кода Python
Еще одно преимущество кода Python заключается в том, что он легко читается. Ка-залось бы, язык программирования предназначен для компьютера, но людям тоже приходится читать ваш код: тем, кто занимается отладкой вашего кода (возможно, это будете вы), тем, кто занимается сопровождением вашего кода (опять-таки это можете быть вы), тем, кто будет изменять этот код в будущем. Во всех этих ситуа-
циях чем понятнее будет код и чем проще он читается, тем лучше. Чем понятнее код, тем проще он в отладке, сопровождении и модификации. Главное преимущество Python в этом отношении — использование отступов. В отличие от многих других языков, Python требует , чтобы блоки кода снабжались отступами. Кому-то это требование может показаться странным, но оно гарантирует, что ваш код всегда будет отформатирован в очень простом и удобочитаемом стиле. Ниже приведены две короткие программы: одна написана на Perl, а другая на Python. Обе программы получают списки чисел одинакового размера и возвращают парную сумму этих списков. На мой взгляд, код Python читается лучше, чем код Perl; он визуально чище и содержит меньше невразумительных знаков: # Версия Perl.
sub pairwise_sum {
my($arg1, $arg2) = @_;
my @result;
for(0 .. $#$arg1) {
push(@result, $arg1->[$_] + $arg2->[$_]);
}
return(\@result);
# Версия Python.
def pairwise_sum(list1, list2):
result = []
for i in range(len(list1)):
result.append(list1[i] + list2[i])
return result
Оба фрагмента делают одно и то же, но код Python побеждает в отношении удобо-читаемости. (Конечно, на Perl то же можно сделать и другими способами, многие из которых гораздо компактнее приведенного, — но в моем представлении они читаются хуже.)