Functions and code objects
Fuzzyman
fuzzyman at gmail.com
Thu Jul 27 12:17:27 EDT 2006
Duncan Booth wrote:
> Fuzzyman wrote:
[snip..]
>
> Does this do what you wanted? Instead of messing about with the code object
> just work out which values from the namespace the function actually
> expects.
>
> >>> def callfromnamespace(fn, namespace):
> names = fn.func_code.co_varnames[:fn.func_code.co_argcount]
> fn(**dict((name, namespace[name])
> for name in names if name in namespace))
>
>
> >>> def f(x, y=99):
> z = 2
> print x, y, z
>
>
> >>> x = 42
> >>> callfromnamespace(f, globals())
> 42 99 2
> >>> y = 37
> >>> callfromnamespace(f, globals())
> 42 37 2
> >>> def testme():
> x = 3
> callfromnamespace(f, vars())
> y = 9
> callfromnamespace(f, vars())
>
>
> >>> testme()
> 3 99 2
> 3 9 2
Hmmm... it may do, thanks. :-)
I'll play around, and this may become a blog entry.
Fuzzyman
http://www.voidspace.org.uk/python/index.shtml
More information about the Python-list
mailing list