First script, please comment and advise
Just
just at xs4all.nl
Fri Mar 10 13:30:16 EST 2006
In article <1141936277.648924.119020 at z34g2000cwc.googlegroups.com>,
bearophileHUGS at lycos.com wrote:
> >1. The fact that one function calls the other doesn't mean they're
> >"logically nested".<
>
> In this situation they were logically nested, because the scramble_word
> is a function needed by another one only, in Java the scramble_word
> becomes a (private) method of a text scrambling class; this means it is
> nested and hided inside a class. Pascal languages were pre-OOP and they
> used nested function for similar purposes, that it to hide and
> structure functions inside other ones, that in OO languages like Java,
> ObjectPascal, Python, etc. you usually do with classes.
In Python one usually doesn't try to hide things.
[ ... ]
> >4. I don't buy the namespace pollution argument, we have modules after all.
>
> I presume Guido agrees that function nesting is another way to avoid
> namespace pollution :-)
I dare you to find out. I'm fairly sure of the answer.
> There are many ways to do the same thing, to
> avoid pollution in one module.
Nesting functions is not one of them. Factoring a bit of functionality
into a helper function, giving that function a name and sticking it into
a module can _hardly_ be called "pollution". That's what modules are
*for*.
[ ... ]
> >To me, nested functions (in Python) are *only* helpful when using closures.
> >If you're not using the enclosing scope, you're just obfuscating things.<
>
> Note that until recent time, Python nested scopes were managed quite
> differently (in a bad way),
Yup.
> and yet, they regarded the function nesting
> useful enough to be kept anyway.
Nested functions are supported because you _need_ them if you want to
work with closures. Not because it's a good way to structure code in the
*absence* of closures.
> I don't agree with you, but every programmer is diffent, because their
> story is different. If you have learnt to program with Java/C then you
> probably don't like nested functions. If you started with a Pascal-like
> language then probably you like that nesting more. If you start with a
> Scheme/Lisp background you progrably write Python programs like the
> good Norvig:
> http://aima.cs.berkeley.edu/python/utils.py
That's pretty good code. Well documented, clearly written, uses some
functional idioms in a sensible way. And no, it doesn't use gratuitous
nested functions.
> Maybe other people here can say what they think about this topic, it's
> just a relaxed discussion.
Sure, it's just that I feel strongly that your advice is not a good one
(*especially* for beginners).
So I repeat: using nested functions are NOT a good way to factor your
code. (I don't need to add "in Python" there, do I?)
Just
More information about the Python-list
mailing list