Похоже, что это не так просто сделать в python - после некоторых исследований. Единственный способ добавить внутреннюю функцию в глобальное пространство имен - это изменить dict globals (), что довольно неудобно.
>>> def mkfunc(funcname):
... def func():
... print "my name is %s" % funcname
... func.__name__ = funcname
... return func
...
>>> mkfunc("abc")
<function abc at 0xb773ae64>
>>> globals()["abc"] = mkfunc("abc")
>>> abc()
my name is abc
Что касается моей собственной проблемы, я рад сделать следующее:
def mkstruct(fields):
def maker(args):
# validate @args against @fields
oid = db_insert_row(fields)
return oid
def getter(oid, fieldname):
rec = db_retrieve(oid)
return rec[fieldname]
def setter(oid, fieldname, value):
db_update(oid, fieldname, value)
return (maker, getter, setter,)
lstnode, lstnode_get, lstnode_set = mkstruct({nodekey: 0, nxt: None})
n = lstnode(nodekey=5)