Scope


A function is reusable code that can be called anywhere in your program.
Video: Functions Get PDF Get Exercises Quiz

Scope

Variables can only reach the area in which they are defined, which is called scope. This will not work:

#!/usr/bin/python
 
def f(x,y):
    print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y))
    print('x * y = ' + str(x*y))
    z = 4 # cannot reach z, so THIS WON'T WORK
 
z = 3
f(3,2)

but this will:

#!/usr/bin/python
 
def f(x,y):
    z = 3
    print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y))
    print('x * y = ' + str(x*y))
    print(z) # can reach because variable z is defined in the function
 
f(3,2)

Let’s examine this further:

#!/usr/bin/python
 
def f(x,y,z):
    return x+y+z # this will return the sum because all variables are passed as parameters
 
sum = f(3,2,1)
print(sum)

Calling functions in functions

We can also get the contents of a variable from another function:

#!/usr/bin/python
 
def highFive():
    return 5
 
def f(x,y):
    z = highFive() # we get the variable contents from highFive()
    return x+y+z # returns x+y+z. z is reachable becaue it is defined above
 
result = f(3,2)
print(result)

If a variable can be reached anywhere in the code is called a global variable. If a variable is known only inside the scope, we call it a local variable.


4 thoughts on “Scope

  1. Carl Wainwright - August 28, 2016

    I ran this code in v2.7.10 and it executed without any errors

    def f(x,y):
        print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y))
        print('x * y = ' + str(x*y))
        z = 4 # cannot reach z, so THIS WON'T WORK
        print(z)
     
    z = 3
    f(3,2)
    MacBookAir:.ssh carlwainwright$ python ~/Projects/Python/helloworld.py 
    You called f(x,y) with the value x = 3 and y = 2
    x * y = 6
    4
    1. Frank - August 28, 2016

      Try this program:

      def showz():
          print(z)
       
      def f(x,y):
          print('You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str($
          print('x * y = ' + str(x*y))
          z = 4 # cannot reach z, so THIS WON'T WORK
          print(z)
       
      z = 3
      f(3,2)
      showz()

      In this example z will still be 3 after calling f(3,2). Sorry for the confusion, ill update

      1. Carl Wainwright - August 29, 2016

        So without “global z” in function ‘f’ z is local to the function and when you return back the global z is scoped.

        1. Frank - August 31, 2016

          Correct, otherwise the changed occur only locally