Defining constant strings

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hans

    #1

    Defining constant strings

    Hi,

    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
  • Tal Einat

    #2
    Re: Defining constant strings


    Hans wrote:
    Hi,
    >
    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
    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,
    though.


    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

    Comment

    • Tal Einat

      #3
      Re: Defining constant strings

      Hans wrote:
      Hi,
      >
      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
      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

      Comment

      • Peter Otten

        #4
        Re: Defining constant strings

        Hans wrote:
        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?
        No, this is not really not possible in Python:

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

        :-)

        Peter

        Comment

        • danielx

          #5
          Re: Defining constant strings

          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.

          Hans wrote:
          Hi,
          >
          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
          ------=_NextPart_000_ 004E_01C6C9FF.C 5137CF0
          Content-Type: text/html; charset=iso-8859-1
          Content-Transfer-Encoding: quoted-printable
          X-Google-AttachSize: 902
          >
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML><HEAD>
          <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
          <META content="MSHTML 6.00.2900.2604" name=GENERATOR>
          <STYLE></STYLE>
          </HEAD>
          <BODY bgColor=#e6e3df >
          <DIV><FONT face=Arial size=2>Hi,</FONT></DIV>
          <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
          <DIV><FONT face=Arial size=2>I want to define a couple of constant strings, like
          in C:</FONT></DIV>
          <DIV><FONT face=Arial size=2>#define mystring "This is my string"</FONT></DIV>
          <DIV><FONT face=Arial size=2>or using a const char construction.</FONT></DIV>
          <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
          <DIV><FONT face=Arial size=2>Is this really not possible in Python?</FONT></DIV>
          <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
          <DIV><FONT face=Arial size=2>Hans</FONT></DIV></BODY></HTML>
          >
          ------=_NextPart_000_ 004E_01C6C9FF.C 5137CF0--

          Comment

          Working...