Please help with Threading
Chris Angelico
rosuav at gmail.com
Mon May 20 10:52:25 EDT 2013
=On Mon, May 20, 2013 at 8:46 PM, Ned Batchelder <ned at nedbatchelder.com> wrote:
> On 5/20/2013 6:09 AM, Chris Angelico wrote:
>>
>> Referencing a function's own name in a default has to have one of
>> these interpretations:
>>
>> 1) It's a self-reference, which can be used to guarantee recursion
>> even if the name is rebound
>> 2) It references whatever previously held that name before this def
>> statement.
>
>
> The meaning must be #2. A def statement is nothing more than a fancy
> assignment statement.
Sure, but the language could have been specced up somewhat
differently, with the same syntax. I was fairly confident that this
would be universally true (well, can't do it with 'print' per se in
older Pythons, but for others); my statement about CPython 3.3 was
just because I hadn't actually hunted down specification proof.
> So your "apparently recursive" print function is no more
> ambiguous "x = x + 1". The x on the right hand side is the old value of x,
> the x on the left hand side will be the new value of x.
>
> # Each of these updates a name
> x = x + 1
>
> def print(*args,print=print,lock=Lock(),**kwargs):
> with lock:
> print(*args,**kwargs)
Yeah. The decorator example makes that fairly clear.
> Of course, if you're going to use that code, a comment might be in order to
> help the next reader through the trickiness...
Absolutely!!
ChrisA
More information about the Python-list
mailing list