On Thu, 15 Mar 2012 00:34:47 +0100, Kiuhnm wrote: > I've just started to read > The Quick Python Book (2nd ed.)
Is this the one? http://manning.com/ceder/ > The author claims that Python code is more readable than Perl code and > provides this example: > > --- Perl --- > sub pairwise_sum { > my($arg1, $arg2) = @_; > my(@result) = (); > @list1 = @$arg1; > @list2 = @$arg2; I don't understand the reason for $arg1 and $arg2. Is there some reason why the code couldn't do this instead? my(@list1, @list2) = @_; > for($i=0; $i < length(@list1); $i++) { > push(@result, $list1[$i] + $list2[$i]); > } > return(\@result); > } > > --- Python --- > def pairwise_sum(list1, list2): > result = [] > for i in range(len(list1)): > result.append(list1[i] + list2[i]) > return result > --- --- > > It's quite clear that he knows little about Perl. On the contrary -- it is quite clear that you are missing the point of the comparison, which is not to compare the most idiomatic Perl with the most idiomatic Python, but to make a direct comparison of syntax for the purpose of teaching beginners. The problem with idiomatic comparisons is that they often don't give you a feel for the overall language syntax. Instead they end up comparing built-ins. For example, here is how I would write the above pairwise addition using idiomatic RPL, the Forth-like programming language used on some Hewlett-Packard scientific calculators: ADD That's it. One word. Would you conclude from this that RPL is easier to read and write than Python? I can tell you that it is not, and I *like* stack-based languages that use reverse Polish Notation. > Here's what I would've written: > > sub pairwise_sum { > my ($list1, $list2) = @_; > my @result; > push @result, $list1->[$_] + $list2->[$_] for (0..@$list1-1); > \@result; > } > > Having said that, the Python code is still more readable, so there's no > need to misrepresent Perl that way. Speaking as somebody who doesn't know Perl, I think that your version would do a great disservice to Perl. Your version is shorter, but conciseness is often in opposition to readability. Without the author's version above, and the function name, I would have literally NO IDEA what your version does. It is virtually pure line-noise. I know enough Perl to guess that @result might be an array, and so guess that push pushes a value onto the array, but the rest might as well be written in Martian. Or APL. The author's version above, which you denigrate, is *much* more understandable than your more idiomatic Perl, especially since I can compare it feature to feature with the Python code. Far from misrepresenting Perl, he has gone out of his way to show Perl in the best possible light. Idiomatic Perl code, written by experts, is even more incomprehensible and unreadable to non-Perl hackers than his example. > Now I'm wondering whether the author will show me "good" or "bad" Python > code throughout the book. Should I keep reading? >From what you have show, and the sample chapters on the link above, I am impressed. The author is aiming to teach basic concepts and impart *understanding* rather than just force-feed the reader idioms which would be incomprehensible to them. Vern Cedar (the author) is an actual professional teacher, and from the samples I have seen, he knows what he is doing. -- Steven -- http://mail.python.org/mailman/listinfo/python-list