We cannot go very far without variables. A variable is a value related to a name that we can bind to have a particular value and then later use in an expression. When a variable is calculated in an statement, it is computed by looking to see to what value it is bound.
An interpreter keeps track of which variables are bound to what values in binding environments. An environment defines a mapping between variable values and names. The values may be integers, ?oating point characters, numbers, or pointers to more hard entities such as procedures or larger collections of data.
Here is an example binding environment:
Each row shows a binding: the entry in the ?rst column is the variable name and the entry in the second column is the value it to which it is bound.
When you start up the Python shell, you instantly start communicating with a local binding environment. You can include a binding or change an existing binding by evaluating an assignment statement of the form:
where is a variable name (a string of letters or digits or the character _, not starting with a digit) and is a Python expression.14 Expressions are always computed in some environment.
We may have the given interaction in a fresh Python shell:
>>> a = 3
Traceback (most recent call last):
File "", line 1, in
NameError: name 'b' is not defined
We started by assigning the variable value 3. That included a binding for a to the local environment.
Next, we computed the statement a. The value of a statement with one or more variable names in it cannot be determined unless we know with respect to what environment it is being computed. Thus, we will always speak of evaluating expressions in an environment. In the mean while the program of evaluating an expression in some environment E, if the interpreter takes a variable, it checks that variable in E: if E contains a binding for the variable, then the related value is returned; if it does not, then an error is provided. In the Python shell communication above, we may see that the interpreter was able to search a binding for a and return a value, but it was not able to ?nd a binding for b.
Why do we bother de?ning values for variables? They provide us to reuse an intermediate value in a calculation. We may want to calculate a formula in two parts, as in:
>>> c = 952**4
>>> c**2 + c / 2.0
They will also play a crucial role in abstraction and the de?nition of function. By providing a name to a value, we can isolate the use of that value in other calculation, so that if we decide to modify the value, we only have to change the de?nition (and not change a value several places in the code).
It is ?ne to reassign the value of a variable; although we use the equality symbol = to stand for assignment, we are not creating a mathematical equation of equality. So, for program, we can write:
>>> a = 3
>>> a = a + 1