Where do nested functions live?
Steve Holden
steve at holdenweb.com
Wed Nov 1 15:01:49 EST 2006
Frederic Rentsch wrote:
> Rob Williscroft wrote:
>
>>Frederic Rentsch wrote in news:mailman.1556.1162316571.11739.python-
>>list at python.org in comp.lang.python:
>>
>>
>>
>>>Rob Williscroft wrote:
>>>
>>>
>>>>Frederic Rentsch wrote in news:mailman.1536.1162292996.11739.python-
>>>>
>>>>
>>>>>Rob Williscroft wrote:
>>>>>
>>>>>
>>>>>>Frederic Rentsch wrote in news:mailman.1428.1162113628.11739.python-
>>>>>>
>>
>>[snip]
>>
>>
>>
>>>>>>
>>>>>>
>>>>>
>>>>>Here I'm lost. What's the advantage of this? It looks more convoluted.
>>>>>
>>>>>
>>>>
>>>>I'll agree that having to explicitly define a namespace class first
>>>>does add some convolution.
>>>>
>>>>But if you refer to having to prefix you "outer" variables with
>>>>"scope." then this would be the same as claiming that the explict use
>>>>of self is convoluted, which is a valid opinion, so fair enough, but
>>>>I can't say that I agree.
>>>>
>>>>
>>>>
>>>
>>>I didn't mean to call into question. I didn't understand the advantage
>>>of the added complexity of your second example over the first.
>>>
>>>
>>
>>Ok, I missed your point, as for the second example it was an attempt
>>to show that further refactoring from a function with local functions
>>that are sharing some state via the scope object, to a class with
>>methods that share state via the instance, is a matter of editing
>>a few lines.
>>
>>This is useful when a function grows too large (for some value of
>>"too large"). As an added bonus you get to use the same thechniques
>>with both styles of coding.
>>
>>[snip]
>>
>>Rob.
>>
>
>
> Rob,
>
> Thanks a lot for your input. I'll have to digest that. Another question
> I had and forgot was this: Since we have a class that goes out of scope
> when the function returns, and we don't need more than one instance, why
> bother to make an instance? Why not use the class object itself?
>
> def whatever( new_ms ):
>
> class scope ( object ):
>
> def inner():
> scope.mseconds = new_ms - s * 1000
> m, scope.seconds = divmod (s, 60)
> h, scope.minutes = divmod (m, 60)
> d, scope.hours = divmod (h, 24)
> scope.weeks, scope.days = divmod (d, 7)
>
That will need to be
class scope(object): pass
to avoid syntax errors, I suspect. There doesn't seem to be any reason
why you couldn't use a class instead of an instance. And, of course,
either might give you problems in the case of a recursive inner function.
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://holdenweb.blogspot.com
Recent Ramblings http://del.icio.us/steve.holden
More information about the Python-list
mailing list