Re: python 3 problem: how to convert an extension method into a classMethod

Discussion in 'Python' started by Peter Otten, Feb 27, 2013.

  1. Peter Otten

    Peter Otten Guest

    Robin Becker wrote:

    > On 26/02/2013 18:38, Peter Otten wrote:
    >> Robin Becker wrote:

    > ...........3:
    >>
    >> $ python -m timeit -s 'from new import instancemethod
    >>> from math import sqrt
    >>> class A(int): pass
    >>> A.m = instancemethod(sqrt, None, A)
    >>> a = A(42)
    >>> ' 'a.m()'

    >> 1000000 loops, best of 3: 0.5 usec per loop
    >> $ python -m timeit -s 'from math import sqrt
    >>> class A(int):
    >>> def m(self):
    >>> return sqrt(self)
    >>> a = A(42)
    >>> ' 'a.m()'

    >> 1000000 loops, best of 3: 0.473 usec per loop
    >>
    >>

    > this analysis might be relevant if I wanted to use sqrt. However, in my
    > case the method takes
    >
    >
    >
    > py C
    > utf8 bytes 50 20 usec
    > unicode 39 15
    >
    > here py refers to a native python method and C to the extension method
    > after adding to the class. Both are called via an instance of the class.


    I think you misunderstood. You compare the time it takes to run the function
    coded in C and its Python equivalent -- that difference is indeed
    significant.

    But what I was trying to measure was the difference between two ways to wrap
    the C function:

    Given a function cfunc implemented in C and the two ways of turning it into
    a method

    (1)
    class A(object):
    pass

    def method(self, ...):
    return cfunc(self, ...)
    A.method = method

    (2)
    class A(object):
    pass

    A.method = new.instancemethod(cfunc, None, A)

    I interpreted my timeit results as an indication that both ways have roughly
    the same overhead (method (1) being 0.027 usec faster).

    I don't have your code available, that's why I picked math.sqrt as an
    example for cfunc.

    I expect that you will get a similar result with your actual cfunc and
    therefore can (and should IMO) use method (1) in both Python 2 and 3
    -- but of course not being able to measure it myself it may turn out I'm
    wrong.
     
    Peter Otten, Feb 27, 2013
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Robin Becker
    Replies:
    1
    Views:
    137
    Steven D'Aprano
    Feb 27, 2013
  2. Dave Angel
    Replies:
    0
    Views:
    131
    Dave Angel
    Feb 26, 2013
  3. Peter Otten
    Replies:
    0
    Views:
    131
    Peter Otten
    Feb 26, 2013
  4. Mark Lawrence
    Replies:
    0
    Views:
    135
    Mark Lawrence
    Feb 26, 2013
  5. Peter Otten
    Replies:
    0
    Views:
    137
    Peter Otten
    Feb 26, 2013
Loading...

Share This Page