This site is from a past semester! The current version will be here when the new semester starts.

Appendix C: Organizing Python Code

You can organize the code as multiple files. Python considers each file as a module. To use a function/class in one file from another, you need to import it first.

Consider the following two files residing in the same directory.

[project_root]/student.py:

def describe(name):
    print(name, 'is a student')

[project_root]/course.py:

import student

student.describe('Adam')

Notice how the course.py imports the student module and uses the student.describe function defined in the student.py file.

You can organize files into sub-directories too.

Consider the following two files.

[project_root]/utils/print_utils/misc.py:

def print_as_list(text):
    print(list(text))

[project_root]/course.py:

from utils.print_utils import misc 

misc.print_as_list('Adam')

Notice how the import statement uses a slightly different syntax and uses . to indicate directory nesting (i.e., utils/print_utilsutils.print_utils). In fact, there are other variations of the import syntax.

When you import a module, Python will interpret and execute any code in it.

Consider this student module being imported into the course module.

[project_root]/student.py:

def describe(name):
    print(name, 'is a student')

describe('Betty')

[project_root]/course.py:

import student

student.describe('Adam')
 → 

Betty is a student
Adam is a student

Notice how the output contains Betty is a student. That is because the line describe('Betty') in student.py is being executed as the student module is being imported.

To prevent execution of statements in an imported module, nest such statements under a if __name__ == "__main__": block.

In the code below, the student module can be executed to get the following output.

[project_root]/student.py:

def describe(name):
    print(name, 'is a student')

if __name__ == "__main__":
    describe('Betty')
 → 

Betty is a student

When the student module is imported to another module, describe('Betty') line is no longer executed.

[project_root]/course.py:

import student

student.describe('Adam')
 → 

Adam is a student