title: Unable to pass an object using **kwargs
body: <p>I have been trying to get a handle on *args and **kwargs keywords.</p>
  <p>I have been playing around with the following code:</p>
  <pre><code>user1 = {
      'name': 'Gandalf',
      'wizard': True
  }
  
  def authenticated(func):
      def inner_func(*args, **kwargs):
          print(kwargs)
          if kwargs['wizard']:
              print('(:**********:)')
          return func(*args, **kwargs)    
      return inner_func
      
      
  @authenticated
  def message_friends(user):
      print(user)
      print(user.name)
      print('message has been sent')
      print(user.items()) # every key-value pair in a dictionary is a tuple
       
      for key, value in user.items(): 
          print(key, value)
          print (type((key, value)))
      print('**********')
  
  message_friends(**user1)
  </code></pre>
  <p>I receive the following error. But I am not certain why. Can someone point me in the right direction.</p>
  <pre><code>{'name': 'Gandalf', 'wizard': True}
  (:**********:)
  Traceback (most recent call last):
    File &quot;main.py&quot;, line 31, in &lt;module&gt;
      message_friends(**user1) #closure is run
    File &quot;main.py&quot;, line 12, in inner_func
      return func(*args, **kwargs)    
  TypeError: message_friends() got an unexpected keyword argument 'name'
  </code></pre>