title: How to pass through Python args and kwargs?
body: <p>While I have a general understanding (I think) of Python's *args and **kwargs, I'm having trouble understanding how to pass them from one function through to another.  Here's my model:</p>
  
  <pre><code>from pdb import set_trace as debug
  from django.db import models
  
  class Person(models.Model):
      name = models.CharField(max_length=30)
  
      def __unicode__(self):
          return u'%s' % self.name
  
      def save_name_for(self, *args, **kwargs):
          self.name = 'Alex'
          return self
  
      def save_name(self, *args, **kwargs):
          debug()
          self.save_name_for(self, args, kwargs)
          self.save()
  </code></pre>
  
  <p>I've split saving a name into two functions above.  This way I can unit-test the logic I would normally put all in the save_name method by unit-testing the save_name_for method instead.</p>
  
  <p>When I run this in the interpreter and stop in the save_name method, as I would expect, I see this:</p>
  
  <pre><code>(Pdb) args
  self =
  args = (1, 2)
  kwargs = {'last': 'Doe', 'first': 'John'}
  </code></pre>
  
  <p>If I then step into the save_name_for method, I see this:</p>
  
  <pre><code>(Pdb) args
  self =
  args = (&lt;Person: &gt;, (1, 2), {'last': 'Doe', 'first': 'John'})
  kwargs = 
  </code></pre>
  
  <p>Is there some way to pass the kwargs that are received by the save_name method directly into save_name_for method so that they appear in the latter's kwargs?  I'd like to see something like this in save_name_for method's name space:</p>
  
  <pre><code>(Pdb) args
  self =
  args = (1, 2)
  kwargs = {'last': 'Doe', 'first': 'John'}   # &lt;= I want this
  </code></pre>
  
  <p>I realize I could parse them in save_name and then pass them explicitly to save_name_for but that seems rather inelegant.  I also thought I might do this since args is a tuple...</p>
  
  <pre><code>kwargs = args[2]
  </code></pre>
  
  <p>... but it doesn't appear to work.  args[2] is just everything (I don't understand this).  Is there a Pythonic way to do this?</p>