Path: csiph.com!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed4.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!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.012 X-Spam-Evidence: '*H*': 0.98; '*S*': 0.00; 'c++,': 0.07; 'nested': 0.07; 'variables': 0.07; '++i)': 0.09; "people's": 0.09; 'python': 0.11; '(int': 0.16; '11:32': 0.16; 'declaration': 0.16; 'declared': 0.16; 'distinct': 0.16; 'scopes': 0.16; 'skip:j 30': 0.16; 'wrote:': 0.18; 'variable': 0.18; 'wed,': 0.18; 'example': 0.22; 'separate': 0.22; 'lets': 0.24; 'visible': 0.24; 'java': 0.24; 'sort': 0.25; 'this:': 0.26; 'read,': 0.26; 'header:In- Reply-To:1': 0.27; "doesn't": 0.30; 'message-id:@mail.gmail.com': 0.30; "i'm": 0.30; 'code': 0.31; 'that.': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'void': 0.31; 'something': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'functions.': 0.36; 'var': 0.36; "i'll": 0.36; 'possible': 0.36; 'should': 0.36; 'two': 0.37; 'to:addr:python-list': 0.38; 'pm,': 0.38; 'to:addr:python.org': 0.39; 'is.': 0.60; 'truly': 0.60; 'matter': 0.61; 'name': 0.63; 'within': 0.65; 'jul': 0.74; 'shadow': 0.84; 'thing,': 0.91; 'hand,': 0.93; '2013': 0.98 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=Yk9bd1gFt36uNv7cSZsg23TMJW9YhbySjoQVb8bpTJg=; b=aMtXbi4/2OjTBlCkcT7iQC6mo+ORbhPRoF7g0DMZvlcPWVLzE9dFzgL7N0hwuGKWu3 0PgKfMpoprc7hwT6R7RSNHZuTlx+WXoy8JzZGx54E0ult6nl4WtH2v3LdkR+rsyagWgF 9RoKUEgCUmiTlemeq24ej81bH5Xm9l0+zw48WksldGA+D8sAxg649vidz9T2MA+/06Fo +Upw5/aXl6+TGX1NMOzKj1NUK+ELArBuohDnUHJ/lDMs3ko9eI5bfjZLUTyjZktWr+ux XVjS0R23/BAm64Mz7jSe6RfJsIP4OIir+E0QXrsPpA9eiGZqNr1oPUdR0YtnSmVNM3AA Ss/w== X-Received: by 10.52.164.227 with SMTP id yt3mr1679569vdb.107.1372921983372; Thu, 04 Jul 2013 00:13:03 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <51d508ed$0$6512$c3e8da3$5496439d@news.astraweb.com> References: <51d4eb9c$0$29999$c3e8da3$5496439d@news.astraweb.com> <51d508ed$0$6512$c3e8da3$5496439d@news.astraweb.com> From: Ian Kelly Date: Thu, 4 Jul 2013 01:12:23 -0600 Subject: Re: Default scope of variables To: Python Content-Type: text/plain; charset=ISO-8859-1 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: 41 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1372921992 news.xs4all.nl 15866 [2001:888:2000:d::a6]:44497 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:49820 On Wed, Jul 3, 2013 at 11:32 PM, Steven D'Aprano wrote: >> Python lets you do that across but not within functions. >> >> But Javascript/ECMAScript/whatever doesn't give you that. A var >> declaration makes it function-local, no matter where the declaration is. >> That's pointless. C++, on the other hand, lets you do this: >> >> void somefunc() { >> for (int i=0;i<10;++i) { >> // do something with outer i >> for (int i=0;i<4;++i) { >> // do something with inner i >> } >> // outer i is visible again >> } >> // neither i is visible >> } > > That's truly horrible. If the cost of this "flexibility" is that I'll > have to read, and debug, other people's code with this sort of thing, I'm > happy to be less flexible. For what possible reason other than "because I > can" would you want to use the same loop variable name in two nested > loops? It's interesting to note that while Java and C# also allow reuse of local variable names, they do not allow local variables declared in inner scopes to shadow variables declared in enclosing scopes, as in the example above. But the following would be perfectly legal: void somefunc() { for (int i = 0; i < a.size; ++i) { // do something with a[i] } for (int i = 0; i < b.size; ++i) { // do something with b[i] } } And the two i's are treated as completely separate variables here, as arguably they should be since they're used for two distinct purposes.