Are you changing the definition of the function each time, or just effectively making duplicates of some common function under different names?

You can do things like this:

def make_funct(blah):
    def inner():
        print blah

    return inner

Then make a few of them with different names and pre-assigned config via the parameters:

f1 = make_funct('Hello World!')
f2 = make_funct('Foo')

And call 'em (with no parameters):

f1()    =>    prints Hello World!
f2()    =>    prints Foo

Perhaps that's not what you're looking for though?

In terms of performance, I suggest trying out both approaches and measuring the time taken to do it a few hundred or thousand times and compare.

Regards
Phil


On 16/04/2012 17:55, Arruda wrote:
Hummm, I see, thanks for that, I didn't know about type.
And is there a way to generate functions too?(I was also doing it using exec).

And do you have any idea of how can I see the difference in performance when using one or the other?
Thanks.

Em segunda-feira, 16 de abril de 2012 13h45min58s UTC-3, Jefferson Heard escreveu:

    Check https://github.com/JeffHeard/ga_dynamic_models
    <https://github.com/JeffHeard/ga_dynamic_models>.  It may be
    similar to what you're looking for.  Even if you don't want the
    code, you can see a way of dynamically generating models.

    On Mon, Apr 16, 2012 at 12:40 PM, Philip Mountifield
    <pmountifi...@formac.net <mailto:pmountifi...@formac.net>> wrote:

        Did you know that you can use the type function to dynamiclly
        generate a class definition?

        See
        http://docs.python.org/library/functions.html?highlight=type#type
        <http://docs.python.org/library/functions.html?highlight=type#type>

        From the example:

        >>>  class  X(object):
        ...     a  =  1

        Is exactly the same as doing...

        >>>  X  =  type('X',  (object,),  dict(a=1))

        No exec required...

        Regards
        Phil



        On 16/04/2012 17:19, Arruda wrote:
        I'm doing something like this to generate some
        models dynamically:

            SIMILAR_MODELS_TEMPLATE=
            """
            @some_decorator
            class %(PREFIX)sModel (Some_Abs_model):
                \"""%(DESCRIPTION)s
                \"""
                pass
            """


        then I have a factory:

            def similar_models_factory(prefix,description):
                 format_dict = {
                                      'PREFIX' : prefix,
                                      'DESCRIPTION' : description,
                 }
                 cls_name = "%sModel" % prefix
                 cls_source = SIMILAR_MODELS_TEMPLATE % format_dict

                 exec(cls_source)
                 new_cls = locals().get(cls_name)
                 return new_cls


        And finally I have in the models.py:

            from my_factories import similar_models_factory

            SIMILAR_MODELS_LIST =(
                {'prefix': 'Foo', 'desc' : 'Foo model and etc..',},
                {'prefix': 'Bars', 'desc' : 'Bars model and etc..',},
            .....
            )

            for smodel in SIMILAR_MODELS_LIST:
                cls = similar_models_factory(smodels['prefix'],
            smodels['desc'])
                vars()[cls.__name__] = cls


        And this gives my just what I want, but I read somewhere that
        if you do:

            exec ""

        It would be too costly, and I would like to know if this
        would have some heavy load in my project(and if please, how
        can I calculate this, to compare?)
        Thanks!
-- You received this message because you are subscribed to the
        Google Groups "Django users" group.
        To view this discussion on the web visit
        https://groups.google.com/d/msg/django-users/-/64JCLnsIFu0J
        <https://groups.google.com/d/msg/django-users/-/64JCLnsIFu0J>.
        To post to this group, send email to
        django-users@googlegroups.com
        <mailto:django-users@googlegroups.com>.
        To unsubscribe from this group, send email to
        django-users+unsubscr...@googlegroups.com
        <mailto:django-users+unsubscr...@googlegroups.com>.
        For more options, visit this group at
        http://groups.google.com/group/django-users?hl=en
        <http://groups.google.com/group/django-users?hl=en>.


--
        Philip Mountifield
        Formac Electronics Ltd
        tel+44 (0) 1225 837333
        fax+44 (0) 1225 430995

        pmountifi...@formac.net  <mailto:pmountifi...@formac.net>
        www.formac.net  <http://www.formac.net>
        www.telgas.net  <http://www.telgas.net>

-- You received this message because you are subscribed to the
        Google Groups "Django users" group.
        To post to this group, send email to
        django-users@googlegroups.com
        <mailto:django-users@googlegroups.com>.
        To unsubscribe from this group, send email to
        django-users+unsubscr...@googlegroups.com
        <mailto:django-users%2bunsubscr...@googlegroups.com>.
        For more options, visit this group at
        http://groups.google.com/group/django-users?hl=en
        <http://groups.google.com/group/django-users?hl=en>.


--
You received this message because you are subscribed to the Google Groups "Django users" group. To view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/pxR15NDv5RUJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.


--

Philip Mountifield
Formac Electronics Ltd
tel  +44 (0) 1225 837333
fax  +44 (0) 1225 430995

pmountifi...@formac.net
www.formac.net
www.telgas.net

--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to