title: Why can't positional arguments follow keyword arguments in Python?
body: <p>Take the following code:</p>
  
  <pre><code>def foo(a, b, c):
      print(a, b, c)
  
  foo(c=3, 1, 2)
  </code></pre>
  
  <p>What I don't understand is why Python doesn't allow this. Python could take the keyword argument and assign it to parameter <code>c</code> then assign the rest of the positional arguments to the unassigned parameters which are <code>a</code> and <code>b</code>.</p>
  
  <p>Why is this not allowed? What's the actual reasoning behind this?</p>
  
  <p>What's even more confusing is that <code>foo(c=3, *(1, 2))</code> works. Isn't this essentially same as the call above since the tuple gets unpacked into the individual arguments?</p>