
spir writes:
Depends on your pov. I consider the _possibility_ of using 'list', 'range' or 'type' as a name for totally custom thing, without even a warning, an issue, not a wishable feature. It _invents_ very hard to diagnose bugs.
If you want warnings, use pylint. It catches all of those. On the other hand, Python's even-handed treatment of builtins, standard library identifiers, and user-defined identifiers makes for a great simplification in the rules for the language, and allows for introspective usage: # Here's something you can do for fun on a lazy Sunday afternoon. the_artist_formerly_known_as_list = list def list(thing): print "Somebody called list!" return the_artist_formerly_known_as_list(thing) For most of us, the gain in simplicity and power is well worth the pain.
Strangely enough, I cannot imagine a use case for 'for' or 'in' or 'while' as names. while these ones are protected (indeed, I don't mean they shouldn't).
Dunno about the other two, but in C I used to use the equivalent of in = open("mind", "r") text = in.readlines() all the time.