python 3's adoption

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Wed Jan 27 01:12:50 EST 2010


On Wed, 27 Jan 2010 02:28:00 +0100, Alf P. Steinbach wrote:

>>>     * Print is now a function. Great, much improvement.
> 
> Actually not, IMHO. All it does is is to provide incompatibility. They
> forgot Ronald Reagan's old maxim: if it don't need fixin', don't fix it.

print as a function is more consistent and more convenient than print as 
a statement. Or to put it another way, print as a statement is less 
consistent and convenient, and therefore in need of fixing. By Ronald 
Reagan's aphorism, it should be fixed, and now does.

Of course there's a bit of a learning curve for those used to the old 
ways, but in two years from now, I expect no-one will remember what the 
fuss was about. Python 2.6 users will start their script with "from 
__future__ import print_function", Python 2.7 users may not even need to 
do that, and we'll all pity those stuck with 2.5 or 2.4.



>>>     * Many functions that return lists now returns “Views” or
>>> “Iterators” Instead. A fucking fuck all fucked up shit. A extraneous
>>> “oop engineering” complication. (See: Lambda in Python 3000)
> 
> On the contrary, this is a great improvement. 

Agreed.


>>>     * The cmp() function used in sort is basically gone, users are now
>>> supposed to use the “key” parameter instead. This is a flying-face-
>>> fuck to computer science. This would be the most serious fuckup in
>>> python 3. (See: Sorting in Python and Perl)
> 
> I agree. :-)

I did too, when I first heard cmp was to be dumped. But I changed my mind 
and now agree with the decision to drop cmp. Custom sorts are nearly 
always much better written with key rather than cmp: key adds an O(N) 
overheard to the sorting, while cmp makes sorting O(N**2). In other 
words, key is *much* faster, and generally easier to write as well.

There may be a handful of rare applications where there is no obvious way 
to convert a cmp function to a key, but they are vanishingly rare. I 
think, if you search the archives, Paul Rubin may have come up with one 
example. There are a number of recipes for easily converting cmp sorts to 
key sorts.

I think, in my perfect world, list.sort() and sorted() should continue 
being key based, while the standard library contained (perhaps in the 
functools module?) a sort function that contains all the bells and 
whistles. You want cmp, it's there, and you can pay the extra cost if you 
need it. You want to sort multiple lists by the contents of one? One 
import away. But keep the general sort() function lean and super-fast.



-- 
Steven



More information about the Python-list mailing list