YAI: syntax for preset locals without using dummy args with defaults

Cliff Wells LogiplexSoftware at earthlink.net
Fri Jan 10 10:43:23 EST 2003


On Fri, 2003-01-10 at 07:22, Bengt Richter wrote:
> --------------------------------------------------------------------------------
> [1] Something like
> 
>     def foo(x, y=default):
>         presets:
>             z = something
>             pi = __import__('math').pi
>             twopi = 2.0*pi # not possible in parameter list version
>             if z < 0: raise ValueError, 'Def-time preset check, possible with presets: block'
>         if x<0 or y<0: raise ValueError, 'Call-time parameter check'
>         return pi*(x*x-y*y)
> 
> I thought the first version above might be easier to implement, but
> either way, having a sanctioned way to accomplish safe presetting of
> function locals should make for a performance boost in many cases.
> 
> I think either version will be interesting for method definitions too.

If I understand your intent (only initializing the 'presets' a single
time), you can get the same performance boost using a class:

class __foo:
    # presets
        z = 1
    pi = __import__('math').pi
    twopi = 2.0*pi # not possible in parameter list version
    if z < 0: raise ValueError, 'Def-time preset check, possible with
presets: block'

    def __call__(self, x, y = 1):
        if x<0 or y<0: raise ValueError, 'Call-time parameter check'
        return self.pi*(x*x-y*y)

foo = __foo()

print foo(1, 2)
print foo(3, 5)


Obviously the downside to this approach is the 'superfluous' __foo
definition that won't be used again, but this works now and doesn't
require any new syntax.


Regards,

-- 
Cliff Wells, Software Engineer
Logiplex Corporation (www.logiplex.net)
(503) 978-6726 x308  (800) 735-0555 x308






More information about the Python-list mailing list