internal functions [Re: How do you feel ?]

Howard Stearns howard.stearns at charter.net
Mon Aug 9 10:11:58 EDT 2004


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




More information about the Python-list mailing list