Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Underscore _ as variable name in Python [duplicate]

Peter Norvig has an essay describing a program to solve sudoku puzzles, 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 (source):

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]) > 1             )     return some( search( assign( values.copy(), s, d))                  for d in values[s]             ) 

(I've added some spaces, CRs, and tabs for the sake of my eyes; apologies to Dr. Norvig.)

Right below the comment there's a line starting with "_,s". That seems to be the unpacked tuple (len(values[s]),s) with the minimal value of s. Is Dr. Norvig using "_" as a variable name just to indicate it's a "don't care" result, or is something else going on? Are there times when "_" is recommended as a variable name? In interactive mode, "_" holds the answer of the previous operation; is there a similar function in non-interactive code?

Update

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.

like image 327
behindthefall Avatar asked Nov 16 '09 00:11

behindthefall


People also ask

What does _ and __ mean in Python?

The use of double underscore ( __ ) in front of a name (specifically a method name) is not a convention; it has a specific meaning to the interpreter. Python mangles these names and it is used to avoid name clashes with names defined by subclasses.

Can we use _ as variable name in Python?

Rules for Python variables: A variable name must start with a letter or the underscore character. A variable name cannot start with a number. A variable name can only contain alpha-numeric characters and underscores (A-z, 0-9, and _ )

What is _ used for in Python?

The python interpreter stores the last expression value to the special variable called _ . The underscore _ is also used for ignoring the specific values. If you don't need the specific values or the values are not used, just assign the values to underscore.

Can you use _ in variable names?

Variable names can never contain spaces. The underscore character ( _ ) can also appear in a name. It is often used in names with multiple words, such as my_name or price_of_tea_in_china .


1 Answers

Yep, _ is a traditional name for "don't care" (which unfortunately clashes with its use in I18N, but that's a separate issue;-). BTW, in today's Python, instead of:

_,s = min( (len( values[s]), s)              for s in squares              if len(values[s]) > 1         ) 

you might code

s = min((s for s in squares if len(values[s])>1),          key=lambda s: len(values[s])) 

(not sure what release of Python Peter was writing for, but the idiom he's using is an example of "decorate-sort-undecorate" [[DSU]] except with min instead of sort, and in today's Python the key= optional parameter is generally the best way to do DSU;-).

like image 192
Alex Martelli Avatar answered Sep 19 '22 19:09

Alex Martelli