Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed2.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.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'assignment': 0.07; 'class,': 0.07; 'odd': 0.07; "'a'": 0.09; 'oh,': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'referenced': 0.09; 'def': 0.12; 'for,': 0.16; 'func():': 0.16; 'globals': 0.16; 'nameerror:': 0.16; 'new:': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'subject:bound': 0.16; 'wrote:': 0.18; 'variable': 0.18; '(but': 0.19; 'dependent': 0.19; '>>>': 0.22; 'import': 0.22; 'print': 0.22; 'header:User-Agent:1': 0.23; 'received:comcast.net': 0.24; 'math': 0.24; 'pass': 0.26; 'defined': 0.27; 'header:X-Complaints-To:1': 0.27; 'header:In- Reply-To:1': 0.27; 'am,': 0.29; 'statement': 0.30; '"",': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'subject:what': 0.31; 'file': 0.32; '(most': 0.33; 'something': 0.35; 'usual': 0.35; 'to:addr :python-list': 0.38; 'recent': 0.39; 'does': 0.39; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'skip:u 10': 0.60; 'strictly': 0.61; 'name': 0.63; 'subject:The': 0.64; 'guaranteed': 0.75; 'behavior': 0.77; 'or:': 0.84; 'subject:gets': 0.84 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Ned Batchelder Subject: Re: The binding operator, and what gets bound to what Date: Fri, 05 Dec 2014 07:06:11 -0500 References: <548113f3$0$13003$c3e8da3$5496439d@news.astraweb.com> <548180ae$0$13007$c3e8da3$5496439d@news.astraweb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Gmane-NNTP-Posting-Host: c-50-133-228-126.hsd1.ma.comcast.net User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: <548180ae$0$13007$c3e8da3$5496439d@news.astraweb.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: 55 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1417781185 news.xs4all.nl 2934 [2001:888:2000:d::a6]:37438 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:81998 On 12/5/14 4:53 AM, Steven D'Aprano wrote: > Oh, I learned something new: strictly speaking, this is implementation- > dependent and not guaranteed to work in the future! > > def func(): > global math > import math I don't think this is implementation-dependent. The import statement is an assignment to a name (as are class, def, for, with-as and except-as). Where that name is scoped is the same for all of them, and does not depend on the implementation. The usual behavior of locals and globals happens for all of them: >>> import math >>> math >>> def f(): ... print math ... import math ... >>> f() Traceback (most recent call last): File "", line 1, in File "", line 2, in f UnboundLocalError: local variable 'math' referenced before assignment >>> a Traceback (most recent call last): File "", line 1, in NameError: name 'a' is not defined >>> def f(): ... global a ... for a in range(10): ... pass ... >>> f() >>> a 9 This also means that you can do odd things like: for self.foo in range(10): or: for my_list[17] in range(10): (but please don't!) -- Ned Batchelder, http://nedbatchelder.com