title: Underscore _ as variable name in Python
body: <p>Peter Norvig has an essay describing a <a href="http://norvig.com/sudoku.html" rel="noreferrer">program to solve sudoku puzzles</a>, even the hardest ones, by combining deterministic logical operations and smart traversal of the possible solutions.  The latter is done recursively; here's that function (<a href="http://norvig.com/sudo.py" rel="noreferrer">source</a>):</p>
  
  <pre><code>def search(values):
      "Using depth-first search and propagation, try all possible values."
      if values is False:
          return False ## Failed earlier
      if all( len( values[s]) == 1 for s in squares): 
          return values ## Solved!
      ## Chose the unfilled square s with the fewest possibilities
      _,s = min( (len( values[s]), s) 
                  for s in squares 
                  if len(values[s]) &gt; 1
              )
      return some( search( assign( values.copy(), s, d)) 
                  for d in values[s]
              )
  </code></pre>
  
  <p>(I've added some spaces, CRs, and tabs for the sake of my eyes; apologies to Dr. Norvig.)</p>
  
  <p>Right below the comment there's a line starting with "<code>_,s</code>".  That seems to be the unpacked tuple (<code>len(values[s]),s</code>) with the minimal value of <code>s</code>.  Is Dr. Norvig using "<code>_</code>" as a variable name just to indicate it's a "don't care" result, or is something else going on?  Are there times when "<code>_</code>" is recommended as a variable name?  In interactive mode, "<code>_</code>" holds the answer of the previous operation; is there a similar function in non-interactive code?</p>
  
  <h3>Update</h3>
  
  <p>Thanks for the good answers.  I guess The Answer goes to Alex Martelli for "value added"; he points out that the "_, vbl_of_interest" idiom is often a side effect of the DSU idiom, which itself has been made largely unnecessary.</p>