[Tutor] replacement for constants from other languages in Python?
Scott W
wegster at mindcore.net
Thu Jan 6 09:15:02 CET 2005
Hey all,
I've done the usual googling, checked the Learning Python book and did
some list searches, to no avail as of yet.
I'm _very_ used to using C style constants (preprocessor #define
directives) or C++ const keyword style, for a variety of reasons.
I've yet to see anything covering 'how to work around the lack of
constants in Python'...can anyone point me in the right direction here?
A few examples/reasons for use:
The 'need' to define a global constant in an imported module, for
example- (I know about sys.version_info, but it doesn't exist in
1.5.2...don't ask ;-) I also know this could be handled via a class,
but what is the equivalent of the following snippets? Not so interested
in style comments (I am, but not on these/this thread ;-) as much as
other ways to do this..
1.
ourversion.py:
import sys
MINVERSION = 1.5
def checkVersion():
""" used as an evil hack because 1.5.2 doesn't have
sys.version_info
"""
# Not sure why, but declaring MINVERSION as repr(foo) in the
# first place doesn't work, something about python type handling
# I'm sure..
return repr(MINVERSION) >= repr(getVersion())
def getVersion():
return sys.version[0:3]
if repr(getVersion() < 2.0)
# boo, we have no builtin bool
global True
global False
True = 1
False = 0
funkyScopeAndConstants.py:
import ourversion.py
import sys
import os
import <someOtherModule>
...
...
if someOtherModule.property = True
# do something
You get the point.
The other oddity is without being able to define a 'real' constant, as
in #DEFINE MINVERSION 1.5,
the scope of MINVERSION (and True/False) even using the global keyword
still uses the ocal file's namespace. I don't want to debate the merits
of using globals...most people that claim they never use any in other
languages _still_ use constants in header files, which is the purpose
I'd like to be able to do generally....not to mention the fact that I
really am _not_ thrilled with the use of string literals typed in each
time in code (yes, quick and dirty code but still) I see seems to be
'OK' in python for the use of comparisons...opposed to something like
if(strncmp(strVal,
CONSTANT_STRING_VAL_LIKE_HTTP_ACCEPT_ENCODING_HEADER,
strlen(strVal)
{
do_something();
}
or
if(floatVal > PI)
{
do_something()
}
ok, hopefully that's explaining some of why I'd like a 'constant
equivalent' as well as a question on global scoping/python namespaces.
A last question would also be if the equivalent of __FILE__ and __LINE__
macros exist?
Thanks,
Scott
More information about the Tutor
mailing list