not even sure why Im engaging, but.... Note 1) Many of these issues have been widely discussed all over the internet -- I don't think I've seen anything new here. So it would have been nice to do some more research before posting. Now into the fray!
Re:Everything being true of false. I don't see the value of
that. Only boolean data should be valid in boolean contexts.
I actually agree with that -- but there are a lot of nice conveniences from Python's idea of "truthiness", too.
The Bad: Colons at the end of if/while/for blocks. Most of the arguments in favour of this decision boil down to PEP 20.2 "Explicit is better than implicit".
I seem to recall that this has to do with an implementation requirement, that the syntax be parseable with an LL parser.
I don't so -- but I DO think that this was a usability issue that was investigated early in PYthon's development. (Or maybe even ABC's development) -- in fact, I suspect is is one of the few programming language syntax decisions (in any language) that went through any kind of formal usability testing. I didn't bring it up -- so I'll leave the googling to others.
Actually the accepted loop-and-a-half idiom is
f = open(file) line = f.readline() while line: process(line) line = f.readline()
I used to write that style, but I've never liked it, so went with: f = open(file) while True: line = f.readline() if not f: break process(line) the while True and check for a break is kinda ugly, but I think less ugly than two separate calls to readline() and, of course, we now have: for line in f: process(line) which is cleaner an easier than anything I've seen in any other language -- so WHAT exactly was the original complaint???
else keyword at the end of while loops is not obvious to those
not familiar with it. Something more like whenFalse would be clearer
I've kinda wanted an "do-until" loop of some sort sometimes, but frankly, not that badly :-)
Changing print from a statement to a function in Python 3 adds no positive value that I can see
yeah, yeah yeah -- PLEASE go read an number of py3 justifications and rants! This is really a dead horse.
Upper delimiters being exclusive while lower delimiters are inclusive. This is very counter intuitive.
but SO much better than the alternative! This was also tested som, I think maybe by Dijkstra of C++ fame. but these identities are REALLY, REALLY useful: s[:n] + s[n:] == s len(s[:n]) == n len(s[:-n]) == n len(s[n:i]) == i - n (maybe a few others?) These prevent a HUGE number of off by one errors and ecta code adding and subtracting one all over the place -- this is almost as important to Pythons' usability as the significant indentation :-)
Conditional expression (<true-value> if <condition> else
<false-value>) in Python is less intuitive than in C (<condition> ? <true-value> : <false-value>).
Ha Ha Ha Ha!!! I could read and understand Python's version the first time I saw it -- I still have to look up the C version (not much of C programmer). maybe you think it's wordy -- but it's very readable. -CHB -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chris.Barker@noaa.gov