title: Why does sorted()'s key parameter require a keyword argument
body: <p>If you inspect the signature of Python's built-in <code>sorted()</code> function like this:</p>
  
  <pre><code>import inspect
  print(inspect.signature(sorted))
  </code></pre>
  
  <p>The signature is: <code>(iterable, key=None, reverse=False)</code>.</p>
  
  <p>Based on my understanding of positional and optional arguments acquired <a href="https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments" rel="nofollow">here</a>, it would seem like you could provide an <code>iterable</code> argument and then a <code>key</code> argument without needing a keyword <code>key=</code> for the <code>key</code> argument.  But you always need to specify <code>key=</code> when passing a <code>key</code> argument.  Why is that?</p>
  
  <p>I understand that if you wanted to specify <code>reverse=True</code>, but without any <code>key</code> argument, you'd need a keyword for that, but I don't understand why you'd need to specify <code>key=</code> when you're providing a <code>key</code>.  </p>