擅长:python、mysql、java
<p>在python中完成这项工作似乎并不容易——经过一些研究之后。将内部函数添加到全局名称空间的唯一方法是修改globals()dict,这相当尴尬。你知道吗</p>
<pre><code>>>> 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
</code></pre>
<p>至于我自己的问题,我愿意做以下几点:</p>
<pre><code>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)
</code></pre>