10

I'm learning Python and I am confused with the constants and literal constants. What are they? For what kind of purpose do we use them? What is the difference from the normal variable?

I'm a true beginner. As beginner, I can say I know nothing about the programming world. For example, I don't know what an expression is and vice versa.

I have been learning the Python language using the "A byte of python" book and somewhere in the book I came across a section which talks about literals and constants.I share the section there:

5.2. Literal Constants

An example of a literal constant is a number like 5 , 1.23 , or a string like 'This is a string' or "It's a string!" .

It is called a literal because it is literal - you use its value literally. The number 2 always represents itself and nothing else - it is a constant because its value cannot be changed. Hence, all these are referred to as literal constants.

Where it says, "it is called literal because it is literal-you use the it's value literally", I just don't get this part. What is the book trying to say that we use the value literally? Another vague point is that the number 2 is a constant because its value cannot be changed. How is it possible? We can change it, like:

stack = 2
stack = 3

First, I assigned the number 2 to the stack then I changed the value of the stack (which is that number 2 that the book is claiming it is a constant so it cannot be changed) and assigned the number 3 to it. So, I easily changed the value of the number 2. I am really confused, if you didn't get my point ,please tell me so I can give more examples.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
user3722727
  • 133
  • 1
  • 1
  • 7

1 Answers1

12

Answer after OP's edit

A literal constant is an actual literal value; I know the word literal confuses you but an example might make it clearer. If you type the following in the REPL:

>>> 2
2
>>> 'hello'
'hello'

2 and hello are actual literal constants and contrary to what you think, you can't change their value (well, you can, as a beginner, it's best to not know about that). When you have:

stack = 2
stack = 3

You are first assigning the constant literal (though, honestly, don't worry about what it's called, it's the number 2) to stack. So, the name stack is pointing to the value 2. Then, by saying stack = 3, you are not changing the value 2; you are now making the name stack to point to another value, 3.

For what it's worth, "constant literal" sounds complicated; just think of values like 2 or 'John' etc. as what they are. And with regards to actual constants (in programming constants are referred to variables that cannot be changed after assignment), that concept doesn't really exist in Python. A constant is when, for instance, you say stack = 2 but then you cannot ever change what stack is pointing to or you'll get an error. In Python, this concept does not exist.

Original Answer:

For starters, I recommend you read The story of None, True and False (and an explanation of literals, keywords and builtins thrown in) by Guido:

A literal, on the other hand, is an element of an expression that describes a constant value. Examples of literals are numbers (e.g. 42, 3.14, or 1.6e-10) and strings (e.g. "Hello, world"). Literals are recognized by the parser, and the exact rules for how literals are parsed are often quite subtle.

As for "constants", you cannot declare a variables as "true constants" in Python. There are a Built-in Constants like True and False and None in Python but even they are not"true constants" in Python 2.X as they can be assigned to point to another value:

True = False
if True:
    print 'Hey' 
else:
    print 'WAAAT!'

I hope this helps. If not, please edit your questions and give an example of what you mean exactly by Constants and Literal Constants.

Note: True and False and the like are keywords in Python 3.x, so if you say True = False, the interpreter will raise SyntaxError: assignment to keyword.

s16h
  • 4,647
  • 1
  • 21
  • 33
  • IIRC `True` and `False` are "true" constants in Python 3… – A T Jun 09 '14 at 15:03
  • 1
    Fixed that. Thanks. They are keywords and assigning to them now raises a `SyntaxError: assignment to keyword` – s16h Jun 09 '14 at 15:05
  • @s16h I really couldn't get the slightest idea from your answer.I have edited my post. – user3722727 Jun 09 '14 at 18:42
  • Let me know if the newly added answer is better please. If not, I may be able to make it simpler; perhaps take another step back. – s16h Jun 09 '14 at 21:21
  • @s16h: Thank you,it was perfect.But if there is nothing exist named Constant in Python,then why some people say there is ? check the link : http://stackoverflow.com/questions/2682745/creating-constant-in-python – user3722727 Jun 10 '14 at 19:09
  • Notice the first thing the selected answer in the link you're provided says: "No there is not. You cannot declare a variable or value as constant in Python.". You can use the convention of naming a variable in all caps so that the person using the variables knows not to change its value but that's just a convention; there is no language construct to stop a person from changing it. – s16h Jun 10 '14 at 21:55
  • 1
    @s16h you said: _2 and hello are actual literal constants and contrary to what you think, you can't change their value (well, you can, as a beginner, it's best to not know about that)_. How exactly can one change the value of `2` and `Hello`? – Marius Mucenicu Jun 24 '18 at 11:58
  • @MariusMucenicu it can be done by finding out the address of where constant literal resides in memory and then changing its value, it can be done using `ctypes` in python. – hack3r-0m Nov 27 '20 at 15:47