title: Python functools partial efficiency
body: <p>I have been working with Python and I set up the following code situation:</p>
  
  <pre><code>import timeit
  
  setting = """
  import functools
  
  def f(a,b,c):
      pass
  
  g = functools.partial(f,c=3)    
  h = functools.partial(f,b=5,c=3)   
  i = functools.partial(f,a=4,b=5,c=3)
  """
  
  print timeit.timeit('f(4,5,3)', setup = setting, number=100000)
  print timeit.timeit('g(4,5)', setup = setting, number=100000)
  print timeit.timeit('h(4)', setup = setting, number=100000)
  print timeit.timeit('i()', setup = setting, number=100000)
  </code></pre>
  
  <p>I get the following as a result:</p>
  
  <pre><code>f: 0.181384086609
  g: 0.39066195488
  h: 0.425783157349
  i: 0.391901016235
  </code></pre>
  
  <p>Why do the calls to the partial functions take longer? Is the partial function just forwarding the parameters to the original function or is it mapping the static arguments throughout? And also, is there a function in Python to return the body of a function filled in given that all the parameters are predefined, like with function i?</p>