12

Suppose I have a function:

def f():
  ...
  ...
  ...
  return a,b,c

and I want to get only b in output of the function. Which assignment I have to use?

Thanks.

0

3 Answers 3

33

You can unpack the returned tuple into some dummy variables:

_, keep_this, _ = f()

It doesn't have to be _, just something obviously unused.

(Don't use _ as a dummy name in the interactive interpreter, there it is used for holding the last result.)

 

Alternatively, index the returned tuple:

keep_this = f()[1]
Sign up to request clarification or add additional context in comments.

8 Comments

Beat me to it by a couple seconds! Darn!
@Naji basically, what the code does is assign the three parts of the tuple to three variables. A single underscore is a valid variable name, and it can be assigned multiple times in one destructuring assignment. So when that assignment is complete, you will have two variables: keep_this, which equals the middle value in the tuple, and _, which (if I'm correct) equals the last value in the tuple. You should look up destructuring assignment to learn more.
There is nothing special about these variables. You could write x, y, z = f() and just ignore x and z. The name _ is just unlikely to be useful for anything else.
If your function returns a huge matrix that matrix already exists (unlike lazy evaluation such as Haskell uses); you can discard your reference to it with del _ if you wish. BTW, _ is a special variable in the interactive interpreter, holding the last returned value.
@Naji The function will return everything it has to return, you can't do anything about it. If it returns a matrix, and you need only a single value from it, use the second method.
|
5
def f():
    return 1,2,3

here, f() returns a tuple (1,2,3) so you can do something like this:

a = f()[0]
print a
1

a = f()[1]
print a
2

a = f()[2]
print a
3

Comments

2

What you are doing with the return a,b,c line is creating a tuple and then returning it from the function. So you can use tuple deconstruction to get only the values you want from the result. Example:

def f(x):
    return x, x + 1, x + 2
_, b, _ = f(0)
print(b) # prints "1"

3 Comments

As a side question, why is the code all on one line? I entered it on several lines...
You somehow managed to put a SOH (0x01, CTRL-A) character in there.
I'm not sure how I managed to do that!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.