Defining constant strings

Discussion in 'Python' started by Hans, Aug 27, 2006.

  1. Hans

    Hans Guest


    I want to define a couple of constant strings, like in C:
    #define mystring "This is my string"
    or using a const char construction.

    Is this really not possible in Python?

    Hans, Aug 27, 2006
    1. Advertisements

  2. Hans

    Tal Einat Guest

    It is really not possible.

    The Pythonic way (as far as I have come to know it) is to stop trying
    to protect yourself from yourself, and just don't change something
    which should be constant. Good documentation (including in-code
    comments) and good design are better for preventing programming errors
    than defining things as constant.

    Actually, you can't really define anything as constant in C either. A
    #define can be overriden, a 'const' variable can be casted. These are
    merely conventions which are enforced to some degree by compilers, but
    can easily be worked around.

    There are conventions for constant values in Python too. Usually,
    variables with an all uppercase name are used. As for variables,
    functions, attributes, methods etc. which shouldn't be changed/used
    outside a certain module/class: these are usually prefixed with an
    underscore ("_"). These are not enforced by the interpreter at all,

    As a side note, Python strings are actually all constants, or
    "immutable" in Python-ish. The variables which reference string objects
    can be changed to reference any other object - that's the nature of
    Python variables. But the strings themselves don't change.

    - Tal
    Tal Einat, Aug 27, 2006
    1. Advertisements

  3. Hans

    Tal Einat Guest

    One last note:

    If you truly insist on having constant variables, you could write a
    class which implements such behavior. You can write a simple class
    which answers your specific needs quite easily.

    Or you could go for a more generic approach, such as this:

    - Tal
    Tal Einat, Aug 27, 2006
  4. Hans

    Peter Otten Guest

    No, this is not really not possible in Python:

    $ ls
    $ cat preprocess.pyp
    #define MYSTRING "Hello, world"
    def f():
    print "Goodbye, " MYOTHERSTRING
    print MYSTRING
    $ gcc -DMYOTHERSTRING="'sanity'" -xc -E preprocess.pyp -o
    $ python
    Hello, world
    Goodbye, sanity


    Peter Otten, Aug 27, 2006
  5. Hans

    danielx Guest

    I would really like to highlight something Tal has already said: Python
    strings are immutable. That means if you construct a string object, you
    don't have to worry about someone else going in and changing that
    object. What might happen, however, is that someone might reassign a
    variable you have which points to that object. You can tell people not
    to do this (although you can't force them) using a mechanism Tal has
    also described. You give your variable a name which is all caps.
    danielx, Aug 27, 2006
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.