Python handles globals badly.

Chris Angelico rosuav at gmail.com
Fri Sep 4 21:54:30 EDT 2015


On Sat, Sep 5, 2015 at 11:42 AM, Michael Torrie <torriem at gmail.com> wrote:
> On 09/04/2015 06:27 PM, Chris Angelico wrote:
>> If you want the first one, well, there are languages like that, and
>> you're welcome to use those. For the latter, it's easy enough to do
>> something like this:
>>
>> import types
>> _g = types.SimpleNamespace()
>>
>> def accumulate(x):
>>     _g.accum += x
>>     return _g.accum
>>
>> Look, Ma! No global statement!
>
> Since most of the time for me when I need a global, I need it to be an
> app global (more than just one module) and I use it to store
> configuration.  So I just use another module for that.
>
> import my_global_module as _g
>
> _g.some_setting = 5

Yeah. Comes to the same thing; if you use a dotted lookup, it's not
assigning to the global.

Of course, you still have all the other concerns about globals. You've
just buried them behind a level of indirection.

> I get the impression, thought, that our esteemed poster is still trying
> to battle the Java windmill, but in Python now and will never accept
> anything we try to tell him about the Python way.  Python does have its
> warts, but often attempts to fix the warts would just make things a lot
> worse.  So I accept them as part of Python's character and try to use
> them to my advantage.

Indeed. The key to being a good programmer is not "write your code
despite the language you're using", but "write the code in the
language you're using".

ChrisA



More information about the Python-list mailing list