This should be a simple question...

Tim Chase python.list at
Mon Mar 9 16:31:04 CET 2009

Steven D'Aprano wrote:
> Tim Chase wrote:
>> If the constants don't actually share any conceptual commonality,
>> then SteveH is right, that they really should just be globals.
> Surely that's backwards? If the constants don't share any conceptual
> commonality, they should be kept independent in the functions and not made
> global.
> k = 2.5
> def population(n):
>     """Return the total population of n families."""
>     return k*n
> def calculate_leave(n):
>     """Return the number of days of leave after working n days."""
>     return n/10*k

This was in the example of two contants that were [un?]related to 
each other, not one constant name for a pair of constant values 
that happenstantially coincide (2.5 in your example).  So


are unrelated to each other and would both just be plain ol' 
globals (not just one combined global).  However, if your 
contants share a relation *with each other*, such as

   class AverageAirspeed:
     class Swallow:
       LADEN = 42
       UNLADEN = 45
     class Parrot:
       DEAD = 0
       LIVE = "VOOM!"

you they can be contained as non-global (only the AverageAirspeed 
namespace becomes globalish) allowing for sharing constants 
across function definitions

   def foo():
     print "Being laden slows swallows by %s" % (
       AverageAirspeed.Swallow.UNLADEN -
     print "This parrot wouldn't %s if you put " \
       "1000000 volts through it!" % AverageAirspeed.Parrot.LIVE

   def bar(parrot, shopkeeper):
     if parrot.speed == AverageAirspeed.Parrot.DEAD:
       return shopkeeper(parrot)


More information about the Python-list mailing list