Meaning of using commas and underscores with Python assignment operator?

Reading through Peter Norvig’s Solving Every Sudoku Puzzle essay, I’ve encountered a few Python idioms that I’ve never seen before.

I’m aware that a function can return a tuple/list of values, in which case you can assign multiple variables to the results, such as

def f():
    return 1,2

a, b = f()

But what is the meaning of each of the following?

d2, = values[s]  ## values[s] is a string and at this point len(values[s]) is 1

If len(values[s]) == 1, then how is this statement different than d2 = values[s]?

Another question about using an underscore in the assignment here:

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

Does the underscore have the effect of basically discarding the first value returned in the list?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

d2, = values[s] is just like a,b=f(), except for unpacking 1 element tuples.

>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>

a is tuple, b is an integer.

Method 2

_ is like any other variable name but usually it means “I don’t care about this variable”.

The second question: it is “value unpacking”. When a function returns a tuple, you can unpack its elements.

>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2

Method 3

The _ in the Python shell also refers to the value of the last operation. Hence

>>> 1
1
>>> _
1

The commas refer to tuple unpacking. What happens is that the return value is a tuple, and so it is unpacked into the variables separated by commas, in the order of the tuple’s elements.

Method 4

You can use the trailing comma in a tuple like this:

>>> (2,)*2
(2, 2)

>>> (2)*2
4


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x