Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Peter Otten <__peter__@web.de> Newsgroups: comp.lang.python Subject: Re: Fear and suspicion of lambdas, was Re: Meta decorator with parameters, defined in explicit functions Date: Thu, 30 Jun 2016 10:41:09 +0200 Organization: None Lines: 63 Message-ID: References: <85mvm5vrbw.fsf@benfinney.id.au> <0690f476-95ad-4dec-87e5-42ecee07fdcd@googlegroups.com> <3d4178b2-8484-417f-8d76-5a2154b2c5e1@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: news.uni-berlin.de BylfoiwvBU7SjWW+3eqC2gCDSgGLn909srVHQsP1vCKQ== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'true,': 0.04; '"""': 0.05; 'lines,': 0.05; 'builtin': 0.07; '[1,': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'typeerror:': 0.09; 'python': 0.10; 'thursday,': 0.13; 'def': 0.13; '2016': 0.16; 'foo():': 0.16; 'item)': 0.16; 'lambda': 0.16; 'readable': 0.16; 'received:80.91.229.3': 0.16; 'received:dip0.t-ipconnect.de': 0.16; 'received:io': 0.16; 'received:plane.gmane.org': 0.16; 'received:psf.io': 0.16; 'received:t-ipconnect.de': 0.16; 'subject:parameters': 0.16; 'sugar': 0.16; 'syntactic': 0.16; 'tracebacks': 0.16; 'wrote:': 0.16; 'case.': 0.18; 'try:': 0.18; '>>>': 0.20; 'lawrence': 0.22; '(most': 0.24; 'somewhere': 0.24; 'header:User-Agent:1': 0.26; 'example': 0.26; 'header:X -Complaints-To:1': 0.26; 'skip:_ 20': 0.26; 'least': 0.27; 'sequence': 0.27; 'yield': 0.27; 'function': 0.28; 'looks': 0.29; 'improves': 0.29; 'raise': 0.29; 'allows': 0.30; "i'm": 0.30; 'foo': 0.33; 'is?': 0.33; 'traceback': 0.33; 'except': 0.34; 'item': 0.35; 'but': 0.36; 'there': 0.36; 'to:addr:python-list': 0.36; 'subject:: ': 0.37; 'being': 0.37; 'received:org': 0.37; 'why': 0.39; 'to:addr:python.org': 0.40; 'subject:with': 0.40; 'received:de': 0.40; 'provide': 0.61; 'side': 0.62; 'course': 0.62; '30,': 0.63; 'more': 0.63; 'eyes': 0.70; 'docstrings.': 0.84; 'otten': 0.84 X-Injected-Via-Gmane: http://gmane.org/ X-Gmane-NNTP-Posting-Host: p57bd9fb5.dip0.t-ipconnect.de User-Agent: KNode/4.13.3 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: X-Mailman-Original-References: <85mvm5vrbw.fsf@benfinney.id.au> <0690f476-95ad-4dec-87e5-42ecee07fdcd@googlegroups.com> <3d4178b2-8484-417f-8d76-5a2154b2c5e1@googlegroups.com> Xref: csiph.com comp.lang.python:110832 Lawrence D’Oliveiro wrote: > On Thursday, June 30, 2016 at 7:26:01 PM UTC+12, Peter Otten wrote: >> foo = lambda : >> >> there is syntactic sugar in Python that allows you to write it as >> >> def foo(): >> return >> >> with the nice side effects that it improves the readability of tracebacks >> and allows you to provide a docstring. > > True, but then again the original had three lambdas, so one line would > have to become at least 3×2 = 6 lines, more if you want docstrings. > >> def reduce(items, func=lambda x, y: x + y): ... > > There was a reason why “reduce” was removed from being a builtin function > in Python 2.x, to being banished to functools in Python 3. You do understand what an example is? >> the alternative >> >> def reduce(items, func=add): ... >> >> looks more readable in my eyes even though somewhere ... > > Just use “sum” in this case. Nah, the implementation is of course def reduce(items, func=lambda x, y: x + y): """ >>> list(reduce([1,2,3])) [1, 3, 6] >>> list(reduce([42])) [42] >>> reduce([]) Traceback (most recent call last): ... TypeError: reduce() with empty sequence """ items = iter(items) try: first = next(items) except StopIteration: raise TypeError("reduce() with empty sequence") def _reduce(accu=first): for item in items: yield accu accu = func(accu, item) yield accu return _reduce() Yes, I'm kidding...