[Python-Dev] Re: new syntax for wrapping (PEP 318)
Bob Ippolito
bob at redivi.com
Wed Feb 25 16:21:02 EST 2004
On Feb 25, 2004, at 4:02 PM, Skip Montanaro wrote:
>
> Michael> The "def name [modifiers]:" is unpythonic because:
> Michael> * It re-uses the "[]" for a completely new purpose,
> unrelated
> Michael> to lists or indexing.
>
> Not necessarily. It names a list of functions to be applied to this
> function to get the final definition (I'll leave it to others to
> figure out
> the order of application :-). In particular, you could probably dream
> up
> some rather "interesting" list constructors which would allow the
> programmer
> (or even the user) to modify the behavior at function definition time:
>
> def is_enabled(m, fname, tracers=os.environ.get("TRACERS", "")):
> "ex: TRACERS=func1:trace,func2:count_lines ; export TRACERS"
> return tracers.find("%s:%s"%(fname,m.__name__)) != -1
>
> modifiers = [trace, profile, count_lines]
>
> def func1(a,b,c) [m for m in modifiers if is_enabled(m, "func1")]:
> ...
>
> def func2(a,b,c) [m for m in modifiers if is_enabled(m, "func2")]:
> ...
>
> that it would necessarily be good to always use such
> complex
> constructs, but it might provide some as-yet-unanticipated power for
> debugging or other magic. If you are going to add [...] as a function
> modifier syntax, I would argue that it should allow the full power of
> list
> (or generator) comprehensions.
I agree with you here, but the patch doesn't do that yet. Right now
you would need to do something like:
def fnseq(lst):
def fnseq(fn):
for obj in lst:
fn = obj(fn)
return fn
return fnseq
def func1(a,b,c) [fnseq([m for m in ...])]:
-bob
More information about the Python-Dev
mailing list