title: Why use packed *args/**kwargs instead of passing list/dict?
body: <p>If I don't know how many arguments a function will be passed, I <em>could</em> write the function using argument packing:</p>
  
  <pre><code>def add(factor, *nums):
      """Add numbers and multiply by factor."""
      return sum(nums) * factor
  </code></pre>
  
  <p>Alternatively, I could avoid argument packing by passing a list of numbers as the argument:</p>
  
  <pre><code>def add(factor, nums):
      """Add numbers and multiply by factor.
  
      :type factor: int
      :type nums: list of int
      """
      return sum(nums) * factor
  </code></pre>
  
  <p>Is there an advantage to using argument packing <code>*args</code> over passing a list of numbers? Or are there situations where one is more appropriate?</p>