On Wed, Sep 28, 2011 at 3:26 PM, Ethan Furman <et...@stoneleaf.us> wrote: > I remember that 'class' is sugar for type(....). > > I don't remember if 'def' is sugar for something besides lambda.
This is something I have thought about a lot since PyCon this year. I apologize in advance. <wink> Since 3.0, class statements are syntactic sugar for some extra steps beyond "meta(...)" [1]. In CPython this is facilitated through the "hidden" __build_class__() builtin[2]. We have the __import__() builtin for customizing module creation. But, as you asked, what about functions? Currently there isn't a way to customize function creation. There is no __build_function__() builtin. The best you can do is, like others have said, directly call FunctionType(...) or type(f)(...) where f is an existing function. I expect that if there were a __build_function__, it would wrap the code that is currently run for the MAKE_FUNCTION/MAKE_CLOSURE opcodes[3]. Also, both modules and classes have mechanisms built-in to allow for customization in certain parts of the creation process (PEP 302[4] and metaclasses[5], respectively). Functions lack this as well, though there hasn't been a big clamor for it. :) Nick Coghlan proposed an interesting idea for this in March[6], with some later follow-up[7]. Nothing much came of it though. Definitely an interesting topic, which has led me to learn a lot about Python and CPython. -eric [1] http://www.python.org/dev/peps/pep-3115/ http://mail.python.org/pipermail/python-3000/2007-March/006338.html [2] http://hg.python.org/cpython/file/default/Python/bltinmodule.c#l35 [3] http://hg.python.org/cpython/file/default/Python/ceval.c#l2680 [4] http://www.python.org/dev/peps/pep-0302/ http://docs.python.org/release/2.3.5/whatsnew/section-pep302.html http://docs.python.org/dev/reference/simple_stmts.html#the-import-statement [5] http://docs.python.org/dev/reference/datamodel.html#customizing-class-creation http://www.python.org/doc/essays/metaclasses/ [6] http://mail.python.org/pipermail/python-ideas/2011-March/009391.html [7] http://mail.python.org/pipermail/python-ideas/2011-March/009625.html http://mail.python.org/pipermail/python-ideas/2011-April/009765.html > > Any clues for me? Heck, I'll even be grateful for outright answers! > > ~Ethan~ > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list