Python Modules
Summary: in this tutorial, you’ll learn about Python modules, how to import objects from a module, and how to develop your modules.
Introduction to Python modules
A module is a piece of software that has a specific functionality. A Python module is a file that contains Python code.
For example, when building a shopping cart application, you can have one module for calculating prices and another module for managing items in the cart. Each module is a separate Python source code file.
A module has a name specified by the filename without the .py
extension. For example, if you have a file called pricing.py
, the module name is pricing
.
Writing Python modules
First, create a new file called pricing.py
and add the following code:
# pricing.pydef get_net_price(price, tax_rate, discount=0):
return price * (1 + tax_rate) * (1-discount)
def get_tax(price, tax_rate=0):
return price * tax_rate
The pricing module has two functions that calculate the net price and tax from the selling price, tax rate, and discount.
Importing module objects
To use objects defined in a module from another file, you can use the import
statement.
The import
statement has several forms that we will discuss in the next sections.
1) import <module_name>
To use objects defined in a module, you need to import the module using the following import
statement:
import module_name
For example, to use the pricing
module in the main.py
file, you use the following statement:
import pricing
When you import a module, Python executes all the code from the corresponding file. In this example, Python executes the code from the pricing.py
file. Also, Python adds the module name to the current module.
This module name allows you to access functions, variables, etc. from the imported module in the current module. For example, you can call a function defined in the imported module using the following syntax:
module_name.function_name()
The following shows how to use the get_net_price()
function defined in the pricing
module in the main.py
file:
# main.pyimport pricing
net_price = pricing.get_net_price(
price=100,
tax_rate=0.01
)
print(net_price)
Output:
101.0
2) import <module_name> as new_name
If you don’t want to use the pricing
as the identifier in the main.py
, you can rename the module name to another as follows:
import pricing as selling_price
And then you can use the selling_price
as the identifier in the main.py
:
net_price = selling_price.get_net_price(
price=100,
tax_rate=0.01
)
3) from <module_name> import <name>
If you want to reference objects in a module without prefixing the module name, you can explicitly import them using the following syntax:
from module_name import fn1, fn2
Now, you can use the imported functions without specifying the module name like this:
fn1()
fn2()
This example imports the get_net_price()
function from the pricing
module:
# main.pyfrom pricing import get_net_price
and use the get_net_price()
function from the pricing
module:
# main.pyfrom pricing import get_net_price
net_price = get_net_price(price=100, tax_rate=0.01)
print(net_price)
4) from <module_name> import <name> as <new_name>: rename the imported objects
It’s possible to rename an imported name to another by using the following import
statement:
from <module_name> import <name> as <new_name>
The following example renames the get_net_price()
function from the pricing
module to calculate_net_price()
function:
from pricing import get_net_price as calculate_net_price
net_price = calculate_net_price(
price=100,
tax_rate=0.1,
discount=0.05
)
5) from <module_name> import * : import all objects from a module
To import every object from a module, you can use the following syntax:
from module_name import *
This import
statement will import all public identifiers including variables, constants, functions, classes, etc., to the program.
However, it’s not a good practice because if the imported modules have the same object, the object from the second module will override the first one. The program may not work as you would expect.
Let’s see the following example.
First, create a new file called product.py
and define the get_tax()
function:
# product.pydef get_tax(price):
return price * 0.1
Both product
and pricing
modules have the get_tax()
function. However, the get_tax()
function from the product
module has only one parameter while the get_tax()
function from the pricing
module has two parameters.
Second, import all objects from both pricing
and product
modules and use the get_tax()
function:
from pricing import *
from product import *
tax = get_tax(100)
print(tax)
Since the get_tax()
function from the product
module overrides the get_tax
() function from the pricing
module, you get the tax
with a value of 10.
Summary
- A module is a Python source code file with the
.py
extension. The module name is the Python file name without the extension. - To use objects from a module, you import them using the
import
statement.