On Friday, June 21, 2013 12:47:56 PM UTC-5, Rotwang wrote: > It isn't clear to me from your posts what exactly you're > proposing as an alternative to the way Python's default > argument binding works. In your version of Python, what > exactly would happen when I passed a mutable argument as a > default value in a def statement? E.g. this: > > >>> a = [1, 2, 3] > >>> a.append(a) > >>> b = object() > >>> def f(x = [None, b, [a, [4]]]): > ... pass # do something > > What would you like to see the interpreter do in this case?
Ignoring that this is a completely contrived example that has no use in the real world, here are one of three methods by which i can handle this: ============================================================ The Benevolent Approach: ============================================================ I could cast a "virtual net" over my poor lemmings before they jump off the cliff by throwing an exception: Traceback (most recent screw-up last): Line BLAH in SCRIPT def f(x = [None, b, [a, [4]]]): ArgumentError: No mutable default arguments allowed! ============================================================ The Apathetic Approach: ============================================================ I could just assume that a programmer is responsible for the code he writes. If he passes mutables into a function as default arguments, and then mutates the mutable later, too bad, he'll understand the value of writing solid code after a few trips to exception Hell. ============================================================ The Malevolent Approach (disguised as beneva-loon-icy): ============================================================ I could use early binding to confuse the hell out of him and enjoy the laughs with all my ivory tower buddies as he falls into fits of confusion and rage. Then enjoy again when he reads the docs. Ahh, the gift that just keeps on giving! ============================================================ Conclusion: ============================================================ As you can probably guess the malevolent approach has some nice fringe benefits. You know, out of all these post, not one of you guys has presented a valid use-case that will give validity to the existence of this PyWart -- at least not one that CANNOT be reproduced by using my fine examples. All you can muster is some weak argument about protecting the lemmings. Is anyone up the challenge? Does anyone here have any real chops? PS: I won't be holding my breath. -- http://mail.python.org/mailman/listinfo/python-list