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


Groups > comp.lang.python > #82857

Re: learning to use iterators

Path csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed1.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail
Return-Path <python-python-list@m.gmane.org>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.002
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'syntax': 0.04; 'parser': 0.07; 'reason,': 0.07; 'parameter': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'python': 0.11; 'bug': 0.12; '23,': 0.16; 'distinct': 0.16; 'expression,': 0.16; 'expression.': 0.16; 'finney': 0.16; 'iterator,': 0.16; 'parentheses': 0.16; 'rather,': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'there?': 0.16; 'wrote:': 0.18; 'header:User-Agent:1': 0.23; 'typical': 0.24; 'performing': 0.26; 'header:X-Complaints-To:1': 0.27; '[1]': 0.29; 'am,': 0.29; 'dec': 0.30; 'needed.': 0.30; 'commonly': 0.31; 'subject:learning': 0.31; 'writes:': 0.31; 'used,': 0.33; 'role': 0.34; 'knows': 0.35; 'but': 0.35; 'words,': 0.36; 'similar': 0.36; 'list': 0.37; 'list.': 0.37; 'clear': 0.37; 'ben': 0.38; 'needed': 0.38; 'to:addr:python-list': 0.38; 'rather': 0.38; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'expression': 0.60; 'ian': 0.60; 'affect': 0.61; 'advanced': 0.63; 'such': 0.63; 'skip:\xe2 10': 0.65; 'surrounding': 0.68; 'ambiguous': 0.84; 'of*': 0.84; 'received:125': 0.84
X-Injected-Via-Gmane http://gmane.org/
To python-list@python.org
From Ben Finney <ben+python@benfinney.id.au>
Subject Re: learning to use iterators
Date Wed, 24 Dec 2014 08:25:45 +1100
References <878uhyb3hq.fsf@net82.ceos.umanitoba.ca> <CALwzid=CjpFPHUhPEbUy537+GCD_jnnZMZdzUx5x9y5=uVsO9A@mail.gmail.com>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Gmane-NNTP-Posting-Host jigong.madmonks.org
X-Public-Key-ID 0xAC128405
X-Public-Key-Fingerprint 517C F14B B2F3 98B0 CB35 4855 B8B2 4C06 AC12 8405
X-Public-Key-URL http://www.benfinney.id.au/contact/bfinney-pubkey.asc
X-Post-From Ben Finney <bignose+hates-spam@benfinney.id.au>
User-Agent Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)
Cancel-Lock sha1:eDzGl+HtLpaHNDC+oKeNKSZtDEA=
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.15
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list/>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.17167.1419369959.18130.python-list@python.org> (permalink)
Lines 40
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1419369959 news.xs4all.nl 2927 [2001:888:2000:d::a6]:45919
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:82857

Show key headers only | View raw


Ian Kelly <ian.g.kelly@gmail.com> writes:

> On Tue, Dec 23, 2014 at 11:55 AM, Seb <spluque@gmail.com> wrote:
> > Particulary, what do the parentheses do there?
>
> The parentheses enclose a generator expression, which is similar to a
> list comprehension [1] but produce a generator, which is a type of
> iterator, rather than a list.

To be clear: there's nothing about parentheses that produce a generator
expression. Rather, parentheses are just performing their typical role
of enclosing an expression.

The generator expression is produced by the syntax used, such as
‘frob(spam) for spam in collection_of_spam if spam > 0’. The surrounding
parentheses don't affect that; they are not part of the generator
syntax. They *do* enclose it so the Python parser knows it is an
expression distinct from what surrounds it.

For this reason, if you already have some syntax where it will be clear
what is a distinct expression, additional parentheses are not needed. In
other words, parentheses are only needed to *separate* a generator
expression from its surrounds.

    # Syntax would be ambiguous without parentheses.
    foo = (frob(spam) for spam in collection_of_spams if spam > 0)

    # Syntax already dictates the parameter is an expression;
    # no additional parens needed.
    twiddle(frob(spam) for spam in collection_of_spams if spam > 0)

Parens are used in a lot of places, but they are commonly not *part of*
the expression; rather, they enclose the expression to be unambiguous.

-- 
 \          “Any sufficiently advanced bug is indistinguishable from a |
  `\                                          feature.” —Rich Kulawiec |
_o__)                                                                  |
Ben Finney

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


Thread

Re: learning to use iterators Ben Finney <ben+python@benfinney.id.au> - 2014-12-24 08:25 +1100

csiph-web