On Thursday, June 20, 2013 5:28:06 PM UTC-5, Lefavor, Matthew (GSFC-582.0)[MICROTEL LLC] wrote: > > [snip example showing dummy coder doing something dumb] > > +1. This is what convinces me that keeping references to > keyword arguments is actually the right thing to do. > > Perhaps I'm biased because I'm used to the mutable- > argument behavior by now, but the gotcha described above > seems to be much harder to track down and understand than > any bugs caused by mutable arguments. With mutable > arguments, at least you know the cause is in the function > definition. If you initialized variables each time, you'd > have to track the problem down across the entire > namespace.
That's because you and many other folks, who keep supporting this BS idea, have become SO accustomed to writing code in a sloppy manner, that you need this flaw to save yourself, FROM YOURSELF! " Hello, allow myself to introduce myself" Apparently you don't understand the value of writing rock solid code. Instead of passing your mutables in as arguments, all you have to do is reference them properly in the BODY of the subroutine and everything will work just fine. If you fear global level variables then write up a simple Object definition to encapsulate the mutable and make it callable. ============================================================ Thought Exercise: ============================================================ Let's imagine for a second if Python allowed mutable keys in a dictionary, would you be surprised if you used a mutable for a key, then you mutated the mutable key, then you could not access the value from the original key? ## Imaginary code ## py> lst = [3] py> d = {1:2, lst:4} py> lst.append(10) py> d[lst] opps, KeyError! Would you REALLY be so surprised? I would not. But more importantly, does Python need to protect you from being such an idiot? I don't think so! Any "intelligent" programmer would NEVER use mutable keys for a hash table -- unless he had a very good reason and was willing to take the risks -- EVEN IF the language allowed such foolishness! But you people will sit here all day arguing that "early binding" is warranted on the grounds that people need to be protected from doing stupid things -- like passing mutables as arguments to subroutines. This is a weak argument. Tell me you have something better, tell me the fate of this language does not revolve around benevolent idiocy! If you really want to save the poor idiot from writing code that could fail, a leader ruled by benevolence, but who has a modicum of intelligence remaining, would simply throw up a warning. Warning: Argument "lst" to function "poopoo" has been mutated, which could cause a subtle bug on successive calls. YOU HAVE BEEN WARNED! What you never, EVER, want to do is to use idiots for an excuse to create some esoteric abomination of persistent mutables between successive calls of subroutines. > I, for one, would much rather follow the rule "don't use > mutable arguments in function definitions" Yes, that's the exact point i'm making! A little self discipline can go a long way > than "don't ever re-use the name of your variables." Well, we're not even talking about that, but i understand the value of your statement. Although, i think your comparing Apples and Oranges. PS: First you support the opposition. now you go an do a 180? You're confusing the hell out of me Matthew! @_@ -- http://mail.python.org/mailman/listinfo/python-list