On Wed, Aug 27, 2008 at 11:01 AM, Brett Cannon <[EMAIL PROTECTED]> wrote: > On Wed, Aug 27, 2008 at 9:29 AM, Sam Bishop <[EMAIL PROTECTED]> wrote: >> On Tue, Aug 26, 2008 at 8:31 PM, Chris Rebert <[EMAIL PROTECTED]> wrote: >>> You might then be interested in the following related discussions from >>> last year wherein I proposed something extremely similar: >>> >>> [Python-ideas] proto-PEP: Fixing Non-constant Default Arguments >>> http://mail.python.org/pipermail/python-ideas/2007-January/000121.html >>> >>> [Python-3000] pre-PEP: Default Argument Expressions >>> http://mail.python.org/pipermail/python-3000/2007-February/005712.html >> >> Hmm... That's too bad. I like your PEP. :) >> >> I disagree with Guido's comment about this being related to class >> variables, from a newbie's point of view anyway. Classes introduce a >> namespace and functions introduce a scope. What surprises me is that >> functions seem to introduce two scopes: one for variables declared as >> formal parameters and one for variables assigned to within the >> function. >> > > But the point is that this is a newbie POV that is based on a > misunderstanding. It's going to be nearly impossible to remove all > possible gotchas from the language based on what a proto-typical > newbie might get tripped up on when it is based on a misunderstanding. > If you don't view everything but function/method bodies as executed > code, then you have a misconception about how Python works. > > Perhaps this can be better explained in the tutorial or language > reference. But because something is not being communicated well by the > documentation does not mean it needs to be changed. > > -Brett >
Normally I'd agree, but in this case there seems to be no significant advantage to the current behavior over the hypothetical behavior beyond simply inertia and a slight possible performance advantage. While the hypothetical behavior would obviate the extremely common "x=None): if x is None: x = foo" idiom AND prevent the sorts of confusion that the OP experienced, the current behavior is mostly only advantageous when using function arguments as caches, except that there are much better and clearer ways to do these caches! But anyway, Python 3.0 is already basically closed to further language modifications, so this discussion is more or less moot. :) - Chris ======== Follow the path of the Iguana... Rebertia: http://rebertia.com Blog: http://blog.rebertia.com _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com