Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #101502

Re: I'm missing something here...

Newsgroups comp.lang.python
Date 2016-01-11 16:31 -0800
References <mailman.26.1452554821.13488.python-list@python.org>
Message-ID <e18786b7-c28a-45a8-8d8d-ad82cbd29ae3@googlegroups.com> (permalink)
Subject Re: I'm missing something here...
From sohcahtoa82@gmail.com

Show all headers | View raw


On Monday, January 11, 2016 at 3:27:21 PM UTC-8, Skip Montanaro wrote:
> Here's a dumb little bit of code, adapted from a slightly larger script:
> 
> #!/usr/bin/env python
> 
> "dummy"
> 
> import glob
> import os
> 
> def compare_prices(*_args):
>     "dummy"
>     return set()
> 
> def find_problems(cx1, cx2, cx3, prob_dates):
>     "dummy"
>     for fff in sorted(glob.glob("/path/to/*.nrm")):
>         sym = os.path.splitext(os.path.basename(fff))[0]
>         prob_dates |= compare_prices("E:%s"%sym, cx1, cx2, cx3)
> 
> When I run pylint against it, it complains:
> 
> junk.py:10: [W0613(unused-argument), find_problems] Unused argument 'prob_dates'
> 
> I must be misunderstanding something about the |= operator as applied
> to sets. If I read the docs correctly, s1 |= s2 is equivalent to
> s1.update(s2). A dumb "test" at the prompt suggests that's true:
> 
> >>> s1 = set("abc")
> >>> s2 = set("cde")
> >>> s1 | s2
> set(['a', 'c', 'b', 'e', 'd'])
> >>> s1 |= s2
> >>> s1
> set(['a', 'c', 'b', 'e', 'd'])
> >>> s1 = set("abc")
> >>> s1.update(s2)
> >>> s1
> set(['a', 'c', 'b', 'e', 'd'])
> 
> If I change the last line of find_problems to call
> prob_dates.update(), the message disappears. Why is pylint (1.4.2 BTW)
> complaining that the prob_dates argument of find_problems is unused
> when I use the |= operator?
> 
> Thx,
> 
> Skip

The pipe character on its own also functions as the binary OR operator, with x |= y being a shortcut for x = x | y.

If prob_dates is an integer, then it is immutable and the your prob_dates |= compare_prices(...) line won't do anything (The variable is being set, but never again read outside the function and it doesn't change the function's return value), which is probably what pylint is complaining about.  Pylint doesn't know that your function is expecting a mutable iterable for the prob_dates argument.

If you change it to prob_dates.update(...), does pylint complain?

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

I'm missing something here... Skip Montanaro <skip.montanaro@gmail.com> - 2016-01-11 17:26 -0600
  Re: I'm missing something here... sohcahtoa82@gmail.com - 2016-01-11 16:31 -0800
    Re: I'm missing something here... Skip Montanaro <skip.montanaro@gmail.com> - 2016-01-11 19:04 -0600
    Re: I'm missing something here... Ian Kelly <ian.g.kelly@gmail.com> - 2016-01-12 09:03 -0700
    Re: I'm missing something here... Skip Montanaro <skip.montanaro@gmail.com> - 2016-01-12 11:46 -0600

csiph-web