Explicit variable declaration

Filip Gruszczyński gruszczy at gmail.com
Wed Apr 23 12:13:34 EDT 2008


Wow! This is extremely easy and seems to do exactly what I need. Those
decorators are pretty powerful then. Thanks for your help, I'll try to
use this.

>  def uses(names):
>     def decorator(f):
>         used = set(f.func_code.co_varnames)
>         declared = set(names.split())
>         undeclared = used-declared
>         unused = declared-used
>         if undeclared:
>             raise ValueError("%s: %s assigned but not declared"
>                % (f.func_name, ','.join(undeclared)))
>         if unused:
>             raise ValueError("%s: %s declared but never used"
>                % (f.func_name, ','.join(unused)))
>         return f
>     return decorator
>
>  Used something like this:
>
>  >>> @uses("x y")
>  def f(x):
>     y = x+1
>     return z
>
>  >>> @uses("x y z")
>  def f(x):
>     y = x+1
>     return z
>
>
>  Traceback (most recent call last):
>   File "<pyshell#36>", line 1, in <module>
>     @uses("x y z")
>   File "<pyshell#32>", line 10, in decorator
>     raise ValueError("%s: %s declared but never used" % (f.func_name,
>  ','.join(unused)))
>  ValueError: f: z declared but never used
>  >>> @uses("x")
>  def f(x):
>     y = x+1
>     return z
>
>
>  Traceback (most recent call last):
>   File "<pyshell#38>", line 1, in <module>
>     @uses("x")
>   File "<pyshell#32>", line 8, in decorator
>     raise ValueError("%s: %s assigned but not declared" % (f.func_name,
>  ','.join(undeclared)))
>  ValueError: f: y assigned but not declared
>
>
> >>>
>
>  --
>  http://mail.python.org/mailman/listinfo/python-list
>



-- 
Filip Gruszczyński


More information about the Python-list mailing list