title: why is it not possible to use value as keyword argument in print function?
body: <p>If I write my function f as this:</p>
  
  <pre><code>def f(a, b, c, d = 4, e = 5, f = 6):
      print(a, b, c, d, e, f)
  </code></pre>
  
  <p>I can call it normally with positional arguments:</p>
  
  <pre><code>f(1, 2, 3)
  </code></pre>
  
  <p>And I can also call it using the positional arguments as keyword arguments:</p>
  
  <pre><code>f(c=3, a=1, b=2)
  </code></pre>
  
  <p>However, if I do that with the print function, I get an error:</p>
  
  <pre><code>&gt;&gt;&gt; print(value=42)
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  TypeError: 'value' is an invalid keyword argument for this function
  </code></pre>
  
  <p>I tried to use value as keyword because it was what it showed me when I did <code>help(print)</code>:</p>
  
  <pre><code>Help on built-in function print in module builtins:
  
  print(...)
      print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
  
      Prints the values to a stream, or to sys.stdout by default.
      Optional keyword arguments:
      file:  a file-like object (stream); defaults to the current sys.stdout.
      sep:   string inserted between values, default a space.
      end:   string appended after the last value, default a newline.
      flush: whether to forcibly flush the stream.
  </code></pre>
  
  <p><strong>edit:</strong> </p>
  
  <p>Now I understand the *objects and I get that print is looking for a tuple of values. The <a href="https://docs.python.org/3/library/functions.html#pow" rel="nofollow noreferrer">pow</a> function illustrates what I ask better:</p>
  
  <pre><code>&gt;&gt;&gt; pow(x=2, y=3)
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  TypeError: pow() takes no keyword arguments
  </code></pre>
  
  <p>Why can't I never seem to refer to the parameters by their names if I use python functions? As I showed above it worked for my f function.</p>