internal functions [Re: How do you feel ?]
Scott David Daniels
Scott.Daniels at Acm.Org
Wed Aug 25 11:07:43 EDT 2004
Howard Stearns wrote:
> Sorry. When I said "define a named function in a top-level assignment",
> I didn't just mean using a reference to a previously defined function
> (i.e., it's name), I meant actually defining the function in the
> assignment.
>
> If you haven't done this sort of thing for years, I could see it being
> hard to imagine why I would want to do this. After all, isn't the code
> clearer if we define the function with a name ahead of time? And doesn't
> the debugger work better with functions that have a name?
>
> Well, I agree with this for what might be called middle-ground uses.
> However, I do a lot of work with very simple cases and very complicated
> ones.
>
> In very simple cases, the code is more cluttered if I have to define the
> function separately. Now, when the function is simple, Python let's me
> define an anonymous function in the assignment. That's cool. But I also
> have cases where the assignment is simple, but maybe the function isn't.
> This came up for me when I tried to populate generic functions with
> methods. (See generic functions thread. Though it looks like decorators
> will soon help me out here...)
>
> In very complex cases, I lament the shear distance between the function
> definition and the one place in the code where it is referenced. (Again,
> maybe decorators will help. Cool.)
>
>
>
> Peter Hansen wrote:
>
>> Howard Stearns wrote:
>>
>>> The one thing I've found annoying is that I haven't yet discovered
>>> how to do whatever I want in lambda expressions. I have top-level
>>> assignments where I'd like create a function to use as the the value
>>> being assigned. I don't know how to define a named function in a
>>> top-level assignment, and a lambda won't allow me to use 'try' and
>>> other statements -- just expressions. Or am I looking at things wrong?
>>
>>
>>
>> What do you mean by "top-level assignment"? If it's the same
>> meaning most Python programmers would give it, you just do this:
>>
>> def somefunc():
>> pass
>>
>> topLevelName = somefunc
>>
>> There's your top-level assignment of a named function. Probably
>> not what you meant, but can you clarify please?
>>
>> -Peter
>
>
Maybe this is what you mean:
def dodef(val):
global globfunc
def globfunc(other):
return val, other
This works just fine.
-Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list