[Python-Dev] default of returning None hurts performance?

Gregory P. Smith greg at krypto.org
Mon Aug 31 23:12:14 CEST 2009


food for thought as noticed by a coworker who has been profiling some hot
code to optimize a library...

If a function does not have a return statement we return None.  Ironically
this makes the foo2 function below faster than the bar2 function at least as
measured using bytecode size:

Python 2.6.2 (r262:71600, Jul 24 2009, 17:29:21)
[GCC 4.2.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dis
>>> def foo(x):
...   y = x()
...   return y
...
>>> def foo2(x):
...   return x()
...
>>> def bar(x):
...   y = x()
...
>>> def bar2(x):
...   x()
...
>>> dis.dis(foo)
  2           0 LOAD_FAST                0 (x)
              3 CALL_FUNCTION            0
              6 STORE_FAST               1 (y)

  3           9 LOAD_FAST                1 (y)
             12 RETURN_VALUE
>>> dis.dis(foo2)
  2           0 LOAD_FAST                0 (x)
              3 CALL_FUNCTION            0
              6 RETURN_VALUE
>>> dis.dis(bar)
  2           0 LOAD_FAST                0 (x)
              3 CALL_FUNCTION            0
              6 STORE_FAST               1 (y)
              9 LOAD_CONST               0 (None)
             12 RETURN_VALUE
>>> dis.dis(bar2)
  2           0 LOAD_FAST                0 (x)
              3 CALL_FUNCTION            0
              6 POP_TOP
              7 LOAD_CONST               0 (None)
             10 RETURN_VALUE
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20090831/e72e1f18/attachment.htm>


More information about the Python-Dev mailing list