tags:

views:

618

answers:

4

I am using a library function called get_count_and_price which returns a 2-tuple (count,price). In many places I use both time and price. However, in some I only need time or price. So right now, if I only need count, I assign to (count,price) and leave the price unused.

This works great and causes no trouble in and of itself.

However...

I use Eclipse with PyDev, and the new version 1.5 automatically shows errors and warnings. One of the warnings it shows is unused variables. In the above example, it flags price as unused. This is the sort of behavior which is great and I really appreciate PyDev doing this for me. However, I would like to skip the assignment to price altogether. Ideally, I would like something like:

(count,None) = get_count_and_price()

Now as we all know, None cannot be assigned to. Is there something else I could do in this case?

I know I could do something like

count = get_count_and_price()[0]

but I am asking just to see if anyone has any better suggestions.

+11  A: 

I think there's nothing wrong with using the [0] subscript, but sometimes people use the "throwaway" variable _. It's actually just like any other variable (with special usage in the console), except that some Python users decided to have it be "throwaway" as a convention.

count, _  = get_count_and_price()

About the PyDev problem, you should just use the [0] subscript anyway. But if you really want to use _ the only solution is to disable the unused variable warnings if that bothers you.

Unknown
be cautious about this. Remember that in an interactive python interpreter, `_` has a special meaning, and assigning to it takes that magic away.
TokenMacGuy
@TokenMacGuy: yes I know, I wrote about that in a similar question here http://stackoverflow.com/questions/818828/is-it-possible-to-implement-a-python-for-range-loop-without-an-iterator-variable/818836#818836
Unknown
Haskell and Erlang also use _ as the "throwaway" variable.
Mark Rushakoff
As long as you don't have gettext as `_()`
kaizer.se
Also found this handy comment/annotation which will make PyDev ignore such warning for the lines which have unused variables: #@UnusedVariable
Because of the above mentioned issues with \_, I usually use a double underscore(\_\_): count, \_\_ = get_count_and_price()
jcdyer
+2  A: 

We often do this.

count, _ = get_count_and_price()

or this

count, junk = get_count_and_price()
S.Lott
+3  A: 

If you go to the Eclipse -> Preferences… window, you can actually specify which variable names PyDev should ignore if they're unused (I'm looking at the newest PyDev 1.5.X).

If you go to PyDev -> Editor -> Code Analysis and look at the last field that says "Don't report unused variable if name starts with"

Enter whatever names you want in there and then use that name to restrict what variable names PyDev will ignore unused warnings for.

By default, it looks like PyDev will hide unused variable warnings for any variables that have names beginning with "dummy", "_", or "unused".

As @TokenMacGuy said below, I'd recommend against using just "_" because it has special meaning in certain scenarios in Python (specifically it's used in the interactive interpreter).

Brent Nash
While you do make a good point about `_` having special meaning in the interpreter, my impression is that it's fairly widely understood to have a different special meaning (if only by convention) in written code.
David Zaslavsky
+4  A: 

Using _ as severally proposed may have some issues (though it's mostly OK). By the Python style guidelines we use at work I'd normally use count, unused_price = ... since pylint is configured to ignore assignments to barenames starting with unused_ (and warn on USE of any such barename instead!-). But I don't know how to instruct PyDev to behave that way!

Alex Martelli