title: the strange arguments of range
body: <p>The range function in python3 takes three arguments. Two of them are optional. So the argument list looks like:</p>
  
  <p>[start], stop, [step]</p>
  
  <p>This means (correct me if i'm wrong) there is an optional argument before a non-optional argument. But if i try to define a function like this i get this:</p>
  
  <pre><code>&gt;&gt;&gt; def foo(a = 1, b, c = 2):
      print(a, b, c)
  SyntaxError: non-default argument follows default argument
  </code></pre>
  
  <p>Is this something I can't do as a 'normal' python user or can i somehow define such a function? Of course i could do something like</p>
  
  <pre><code>def foo(a, b = None, c = 2):
      if not b:
          b = a
          a = 1
  </code></pre>
  
  <p>but for example the help function would then show strange informations. So i really want to know if it's possible do define a function like the built-in <code>range</code>.</p>