title: forcing keyword arguments in python 2.7
body: <p>I know I can use <code>*</code> to force all keyword arguments to a function/method to be "named". </p>
  
  <p>If I have</p>
  
  <pre><code>def abc(a, *, x=10, z=30):
      pass
  </code></pre>
  
  <p>then the following all work</p>
  
  <pre><code>abc(5)
  abc(8, x=12)
  abc(9, z=31)
  abc(x=17, a=4)
  </code></pre>
  
  <p>even if I change the function signature to <code>def abc(a, *, x=10, y=20, z=30)</code>, 
  and </p>
  
  <pre><code>abc(7, 13)
  </code></pre>
  
  <p>throws an error.</p>
  
  <p>This is extremely important because, I can use the logical place, which will help maintenance over time, without being forced to use the end position based on history.</p>
  
  <p>But * is not valid in Python 2.7, and <code>abc(a, *args, x=10, z=30)</code> (which I tried) doesn't work either. </p>
  
  <p>Is there a way to force the use of <code>x=12</code> in Python 2.7? Or another way of saying: make <code>abc(7, 13)</code> be invalid on Python 2.7.</p>