Path: csiph.com!usenet.pasdenom.info!news.albasani.net!newsfeed.freenet.ag!news2.euro.net!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.148 X-Spam-Level: * X-Spam-Evidence: '*H*': 0.71; '*S*': 0.00; 'represents': 0.05; '(same': 0.16; 'bracket': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'appropriate': 0.16; 'wrote:': 0.18; 'thu,': 0.19; 'example': 0.22; 'saying': 0.22; "i've": 0.25; 'header:In-Reply-To:1': 0.27; 'on,': 0.29; 'message- id:@mail.gmail.com': 0.30; 'work.': 0.31; 'code': 0.31; "d'aprano": 0.31; 'piece': 0.31; 'steven': 0.31; 'anyone': 0.31; 'class': 0.32; 'transaction': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'c++': 0.36; 'object,': 0.36; 'doing': 0.36; 'project': 0.37; 'needed': 0.38; 'to:addr:python-list': 0.38; 'pm,': 0.38; 'heard': 0.39; 'to:addr:python.org': 0.39; 'called': 0.40; 'is.': 0.60; 'new': 0.61; 'name': 0.63; 'pick': 0.64; 'different': 0.65; 'within': 0.65; 'jul': 0.74; 'rolls': 0.84; 'shadow': 0.84; 'thing,': 0.91; '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:date:message-id:subject:from:to :content-type; bh=AxqFPUp/4IJvrg4wiqNSBVfU2YNkDBui0fu09GbziNE=; b=xzGK36Bm8NIvNmHjuqCWLemwrn3VCAePs1K4Bz9MS+A60Ow8jt3MLJuf3iGRKWihd/ 4CZqLGZN9/yvMpKL4n9QRuNJtf34JlRsKL2w6UVM6+CiDI1cqWhJCpLOB9+VYuKrolq3 wgSpcp/XUYFpMDRIHKXxJbb+NI59T9fs8wiGPEB+fBE1fWxIdpxXEHinZ4VFwhyKSXEh lt/d6o8LAi4LQ2F4ZInS+dbSF18OPNL0kTyjqFVrTU+RQzbJ+LDOqEXh9Hfobpy8f6WT spzqjZfjICe2A0GEWgoes2eWw0JE1rji0tzXAhWsSpO68I2/fsjvny8I7FU+xo1dXALO 8gbQ== MIME-Version: 1.0 X-Received: by 10.220.169.146 with SMTP id z18mr1790667vcy.80.1372916877228; Wed, 03 Jul 2013 22:47:57 -0700 (PDT) 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> Date: Thu, 4 Jul 2013 15:47:57 +1000 Subject: Re: Default scope of variables From: Chris Angelico To: python-list@python.org 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: 18 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1372916885 news.xs4all.nl 15936 [2001:888:2000:d::a6]:53495 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:49817 On Thu, Jul 4, 2013 at 3:32 PM, Steven D'Aprano wrote: > Accidental shadowing can be a problem, but I've never heard of anyone > saying that they were *forced* to shadow a global they needed access to. > Just pick a different name. Here's one example of shadowing that comes from a C++ project at work. I have a class that represents a database transaction (constructing it begins a transaction, it has methods for doing queries, and its destructor rolls back). There's also a class for a subtransation (same thing, but it uses savepoints within the transaction). So to bracket a piece of code in a subtransaction, I want to declare a new subtransaction object with the same name as the outer transaction object, and then dispose of it and "reveal" the original. There will always be an object called "trans", and it will always be the appropriate transaction to do queries on, but it'll change what it is. ChrisA