Path: csiph.com!usenet.pasdenom.info!gegeweb.org!usenet-fr.net!nerim.net!novso.com!newsfeed.xs4all.nl!newsfeed1a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.013 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; 'none:': 0.07; 'reason,': 0.07; 'arguments': 0.09; 'imply': 0.09; 'oh,': 0.09; 'parameter': 0.09; 'def': 0.12; 'bug': 0.12; '-tkc': 0.16; 'from:addr:python.list': 0.16; 'from:addr:tim.thechases.com': 0.16; 'from:name:tim chase': 0.16; 'opposite': 0.16; 'reproduce': 0.16; 'subject: \n ': 0.16; 'subject:More': 0.16; 'wrote:': 0.18; 'bit': 0.19; 'regardless': 0.24; 'primary': 0.26; 'header:In- Reply-To:1': 0.27; 'function': 0.29; 'generally': 0.29; 'thus': 0.29; 'code': 0.31; 'bug?': 0.31; 'clock': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'subject:other': 0.31; 'class': 0.32; 'lists': 0.32; 'there.': 0.32; '(e.g.': 0.33; 'call.': 0.33; 'skip:_ 10': 0.34; 'skip:d 20': 0.34; "i'd": 0.34; 'something': 0.35; 'test': 0.35; 'but': 0.35; 'there': 0.35; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'how': 0.40; 'even': 0.60; 'is.': 0.60; 'skip:* 10': 0.61; "you'll": 0.62; 'name': 0.63; 'personal': 0.63; '8bit%:21': 0.69; 'fact,': 0.69; 'disagreement': 0.84; 'received:50.22': 0.84; 'subject:!)': 0.84; 'subject:via': 0.84 Date: Thu, 13 Feb 2014 05:39:52 -0600 From: Tim Chase To: python-list@python.org Subject: Re: PyWart: More surpises via "implict conversion to boolean" (and other steaming piles!) In-Reply-To: <52fc45e6$0$11128$c3e8da3@news.astraweb.com> References: <85c2698c-d681-4511-b111-bb1e549ece93@googlegroups.com> <52f9c392$0$11128$c3e8da3@news.astraweb.com> <52fc45e6$0$11128$c3e8da3@news.astraweb.com> X-Mailer: Claws Mail 3.8.1 (GTK+ 2.24.10; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - boston.accountservergroup.com X-AntiAbuse: Original Domain - python.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tim.thechases.com X-Get-Message-Sender-Via: boston.accountservergroup.com: authenticated_id: tim@thechases.com X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 52 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1392291557 news.xs4all.nl 2882 [2001:888:2000:d::a6]:40284 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:66164 On 2014-02-13 04:11, Steven D'Aprano wrote: > give_me_an_even_number() > =3D> returns 42 > give_me_an_even_number() > =3D> returns 23 >=20 > Hmmm. There's a bug in give_me_an_even_number(). How do I reproduce > that bug? What arguments do I pass? Oh, the same no-arguments as > for the working call. >=20 > Clearly, the function must have *hidden state*. Hidden state (e.g. > a global variable) makes it hard to reason about the function call, > since you don't know what the hidden state is. So that's also a bit > smelly. I'd even go so far as to claim that this is the primary reason a zero-argument function is a code-smell. Not because zero-argument functions smell, but because hidden-state smells and zero-argument functions imply hidden-state. Date/time functions are a personal pet peeve for just this reason, and require addressing the hidden-state of the system clock regardless of parameter-count. Thus instead of something like class Person: def __init__(self, name, dob): self.name =3D name self.dob =3D dob def age(self): return datetime.date.today() - self.dob I do def age(self, as_of=3DNone): if as_of is None: as_of =3D datetime.date.today() return as_of =3D self.dob allowing me to test the function with known dates. > > There are code smells that are the opposite in fact, methods with > > long parameter lists are generally seen as code smell (=E2=80=9Cpassing= a > > paragraph=E2=80=9D). >=20 > Absolutely! You'll get no disagreement from me there. *coughtkintercough* -tkc