On Wed, 02 Jan 2013 00:49:36 +0100, someone wrote: > On 01/01/2013 12:49 PM, Steven D'Aprano wrote: > > On Tue, 01 Jan 2013 12:00:32 +0100, someone wrote: > > > >> See this code (understand why I commented out first line): > >> > >> # from OpenGL.GL import * > > [...] > >> The reason why I commented out the first line is that I use "pylint" > >> and it reports: "[W] Redefining built-in 'format'" for this line. > >> > >> From: http://www.logilab.org/card/pylintfeatures tell: W0621: > >> Redefining name %r from outer scope (line %s) Used when a variable's > >> name hide a name defined in the outer scope. > >> > >> I don't like to redefine already defined names so therefore I had to > >> outcomment first line and then keep on adding stuff until I could > >> run my program... But this SUCKS! I can see that pygame hasn't been > >> updated for a long while - not many users use it? I'm not very happy > >> about this... > > > > from pygame import * > > del format > > Are you sure about this? Because I'm not (OTOH I'm maybe not as > experienced in python as some of you)...
In the general case of deleting global names that shadow builtin names, yes I am. In the specific case of importing * from pygame, no. I trusted you that pygame exports format. Unfortunately, it seems that you were fooled by an invalid warning from pylint, so we were both mistaken. > Ipython log: > > -------- > In [6]: test=format(43) > In [7]: type(test) > Out[7]: str > In [8]: from pygame import * > In [9]: test=format(43) > In [10]: type(test) > Out[10]: str > In [11]: del format > ------------------------------------------------------------------------ > NameError Traceback (most recent call last) > <ipython-input-11-028e6ffb84a8> in <module>() > ----> 1 del format > > NameError: name 'format' is not defined > -------- > > What does this mean? Why does it say 'format" cannot be deleted after I > did the wildcard import ? It means that there is no "format" in the current scope, which implies that pygame no longer has a "format" which can be imported. You don't need an import to shadow built-ins. See for example: py> format <built-in function format> py> format = "NOBODY expects the Spanish Inquisition!" py> format # this shadows the built-in "format" 'NOBODY expects the Spanish Inquisition!' py> del format # get rid of the Spanish Inquisition py> format <built-in function format> py> del format Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'format' is not defined When a name is not discovered in the current scope, the builtin scope is checked before Python gives up and reports a NameError. But del only works on the current scope, to stop you from accidentally deleting the wrong object. > > pylint may still complain, but you can ignore it. By deleting the > > name "format", that will unshadow the builtin format. > > Are you sure? Since it turns out that pylint was actually wrong to complain, no format was actually imported, then yes you can safely ignore it :-) -- Steven -- http://mail.python.org/mailman/listinfo/python-list