Nearby lessons

68 of 108

Python - Modules

Introduction to Modules

As programs become larger, writing all the code in a single file becomes difficult to manage.

Python solves this problem by allowing us to divide programs into multiple files called Modules.

A module contains related functions, variables, and classes that can be reused in different programs.

Using modules makes programs more organized, reusable, and easier to maintain.

What is a Module?

A Module is a collection of related functions, variables, and classes stored in a single Python file.

Every module is saved with the .py extension.

Instead of writing the same code repeatedly, we can place the code inside a module and use it whenever required.

Definition of Module

A group of functions, variables, and classes saved to a file is called a Module.

Every Python file with the .py extension acts as a module.

Why Do We Use Modules?

Modules provide several advantages while developing Python applications.

They help us organize code, avoid duplication, and make programs easier to understand.

Modules help us:

  • Organize related code into a single file.
  • Reuse the same code in multiple programs.
  • Reduce code duplication.
  • Make programs easier to maintain.
  • Improve readability.
  • Simplify testing and debugging.

Every Python File is a Module

Every Python file (.py) is automatically treated as a module.

For example, if a file is named durgamath.py, Python considers it a module.

Any functions, variables, or classes defined inside that file become members of the module.

Example Module

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Explanation

The file durgamath.py is a Python module.

We can store related mathematical functions inside this file and use them in other Python programs.

Creating a User-Defined Module

A module created by the programmer is called a User-Defined Module.

To create a user-defined module, simply create a Python file and write variables, functions, or classes inside it.

For example, create a file named durgamath.py.

Program - Create a Module (durgamath.py)

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Understanding the Module

The module contains the following members:

  • One variable: x
  • Function: add()
  • Function: product()

These members can be accessed from another Python program after importing the module.

Using a Module

If we want to use the members of a module in another program, we should import that module.

After importing the module, we can access its variables, functions, and classes.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Accessing Module Members

After importing the module, its members are accessed using the module name.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - Using the durgamath Module

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
888
The Sum: 30
The Product: 200

Program Explanation

Step 1

import durgamath

Imports the durgamath module.

Step 2

print(durgamath.x)

Accesses the variable x from the module.

Step 3

durgamath.add(10, 20)

Calls the add() function from the module.

Step 4

durgamath.product(10, 20)

Calls the product() function from the module.

Important Note

Whenever we use a module in our program, Python generates a compiled file for that module and stores it permanently on the hard disk.

Module Structure

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Flow of Module Usage

Create Module
      │
      ▼
Import Module
      │
      ▼
Access Variables
      │
      ▼
Call Functions
        

Complete Summary

Topic Description
Module A file containing functions, variables, and classes.
Python Module Every .py file.
import Used to load a module.
Access Variable module.variable
Access Function module.function()
Example Module durgamath.py

Advantages of Modules

  • Improves code organization.
  • Encourages code reuse.
  • Reduces duplication.
  • Makes maintenance easier.
  • Improves readability.
  • Supports modular programming.
  • Allows multiple programs to share the same code.

Real-World Applications

  • Building reusable utility libraries.
  • Creating large software projects.
  • Organizing application code into separate files.
  • Sharing common functions among multiple programs.
  • Developing reusable APIs and frameworks.

Important Interview Questions

  1. What is a Module in Python?
  2. Why do we use Modules?
  3. Is every Python file a module?
  4. What is a User-Defined Module?
  5. How do you create a module?
  6. How do you import a module?
  7. How do you access variables from a module?
  8. How do you call functions from a module?
  9. What happens when a module is imported?
  10. What are the advantages of using Modules?

Important Notes

  • A module is a collection of functions, variables, and classes stored in a Python file.
  • Every Python file (.py) acts as a module.
  • User-defined modules are created by programmers.
  • The import statement is used to load a module.
  • Module variables are accessed using module_name.variable.
  • Module functions are called using module_name.function().
  • According to the tutorial, importing a module generates a compiled file for that module.
  • Modules help organize and reuse code efficiently.

Introduction to Module Aliasing

In the previous section, we learned how to create and import user-defined modules.

Python also allows us to import modules in different ways depending on our requirements.

Sometimes a module name is too long or conflicts with another identifier in the program.

In such cases, Python allows us to give another name to the module while importing it. This feature is called Module Aliasing.

What is Module Aliasing?

Sometimes we can provide another name to a module while importing it.

This is called Module Aliasing.

Using an alias makes the module name shorter and easier to use throughout the program.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Explanation

In this example:

  • durgamath is the original module name.
  • m is the alias name.

After importing the module with an alias, all members of the module are accessed using the alias name.

Accessing Members by Using Alias Name

After creating an alias, we can access all module members by using the alias name.

Program - Using Module Alias

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
888
The Sum: 30
The Product: 200

Program Explanation

The module durgamath is imported with the alias m.

The variable x is accessed using m.x.

The functions add() and product() are also called using the alias name.

This makes the code shorter and easier to read.

The from ... import Statement

Sometimes we do not need all the members of a module.

Instead of importing the entire module, Python allows us to import only the required members.

This is done using the from ... import statement.

The main advantage is that imported members can be accessed directly without using the module name.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - Import Selected Members

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
888
The Sum: 30

NameError: name 'product' is not defined

Explanation

  • x and add() are imported successfully.
  • product() is not imported.
  • Since product() is unavailable, Python raises a NameError.

Importing All Members

If we want to import every member of a module, we can use the * operator.

This imports all variables, functions, and classes from the module.

After importing, the members can be accessed directly without using the module name.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - Import All Members

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
888
The Sum: 30
The Product: 200

Various Possibilities of import

Python supports several ways to import modules.

The appropriate method depends on the requirements of the program.

Different Import Statements

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Member Aliasing

Just as we can rename a module, we can also rename individual module members while importing them.

This feature is called Member Aliasing.

Program - Member Aliasing

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
888
The Sum: 30

Explanation

The variable x is imported with the alias y.

The function add() is imported with the alias sum.

After importing, only the alias names can be used.

Important Rule

Once an alias name is assigned, we must use only the alias name.

The original name cannot be used in the current program.

Program - Using Original Name After Aliasing

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
NameError: name 'x' is not defined

Explanation

The variable x was imported with the alias y.

Therefore, the original name x is no longer available in the current program.

Using x raises a NameError.

Comparison of Import Statements

Import Statement Access Method
import durgamath durgamath.add()
import durgamath as m m.add()
from durgamath import add add()
from durgamath import * Direct access to all imported members.

Complete Summary

Topic Description
Module Aliasing Renaming a module during import.
Alias Keyword as
from ... import Imports selected members.
from ... import * Imports all members.
Member Aliasing Renaming imported members.

Advantages of Module Aliasing

  • Reduces long module names.
  • Makes code easier to read.
  • Improves code readability.
  • Helps avoid naming conflicts.
  • Provides convenient access to module members.

Advantages of from ... import

  • Imports only the required members.
  • Allows direct access without using the module name.
  • Produces shorter code.
  • Improves readability when only a few members are needed.

Real-World Applications

  • Using short aliases for large library names such as numpy as np.
  • Importing only frequently used functions.
  • Avoiding conflicts between modules with similar names.
  • Writing clean and maintainable Python programs.

Important Interview Questions

  1. What is Module Aliasing?
  2. Why do we use the as keyword?
  3. What is the difference between import module and from module import member?
  4. What does from module import * do?
  5. What is Member Aliasing?
  6. Can the original member name be used after aliasing?
  7. What happens if a non-imported member is accessed?
  8. List different ways to import modules in Python.
  9. When should Module Aliasing be used?
  10. What are the advantages of importing selected members?

Important Notes

  • Module aliasing is done using the as keyword.
  • After creating an alias, module members are accessed through the alias name.
  • from ... import imports only the specified members.
  • Imported members can be accessed directly without using the module name.
  • from module import * imports all members of the module.
  • Member aliasing allows imported members to be renamed.
  • Once a member is imported with an alias, only the alias name can be used.
  • Using the original member name after aliasing results in a NameError.

Introduction to Reloading Modules

When a module is imported into a Python program, Python loads it only once.

Even if the same module is imported multiple times, Python does not reload it again.

This improves program performance because the module does not need to be loaded repeatedly.

However, this behavior creates a problem when the source code of the module is modified after it has already been imported.

In such situations, Python continues using the old version of the module instead of the updated one.

To use the modified version without restarting the Python interpreter, we must reload the module.

Reloading a Module

By default, a module will be loaded only once, even if we import it multiple times.

If we modify the source code of a module after importing it, those changes are not reflected automatically in the current program.

To load the updated version of the module, we must reload it.

Why Reloading is Required?

Suppose:

  • A module is already imported.
  • Later, the module is modified.
  • We want to use the updated version without restarting the Python interpreter.

In this situation, we should reload the module.

reload() Function

The reload() function is used to reload an already imported module.

Before using reload(), we should import it from the imp module.

After reloading, Python loads the latest version of the module from the source file.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

Assume the following module already exists.

Program - durgamath.py

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - test.py

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program Explanation

Step 1

import durgamath

The durgamath module is imported into the program.

Step 2

print(durgamath.x)

The value of the variable x stored in the module is displayed.

Step 3

from imp import reload

The reload() function is imported from the imp module.

Step 4

reload(durgamath)

The module is reloaded so that Python reads the latest version from the source file.

Step 5

print(durgamath.x)

The updated value of x is displayed after the module has been reloaded.

How reload() Works

  1. Python imports the module for the first time.
  2. The module is stored in memory.
  3. If the module source code changes later, Python continues using the old version.
  4. The reload() function forces Python to read the module file again.
  5. The updated module replaces the old version in memory.

Flow of Module Reloading

Import Module
      │
      ▼
Module Loaded into Memory
      │
      ▼
Modify Source Code
      │
      ▼
Old Version Still Used
      │
      ▼
Call reload(module)
      │
      ▼
Latest Version Loaded
        

Important Point

If a module is modified after it has already been imported, Python does not load the modified version automatically.

We must explicitly call:

reload(module_name)

Only then will Python use the updated version of the module in the current program.

When Should We Use reload()?

  • When developing or testing Python modules.
  • When a module is modified while the interpreter is still running.
  • When we want to use the latest version without restarting Python.
  • During debugging to verify changes immediately.

Advantages of reload()

  • Loads the latest version of a module.
  • Removes the need to restart the Python interpreter.
  • Useful during development and debugging.
  • Allows testing updated module code immediately.

Limitations of reload()

  • Works only with modules that have already been imported.
  • Must be called explicitly.
  • Python does not reload modules automatically after they are modified.

Real-World Applications

  • Developing reusable Python libraries.
  • Testing modules during software development.
  • Interactive Python sessions.
  • Debugging applications without restarting the interpreter.
  • Updating utility modules during development.

Quick Summary

Topic Description
Reloading Loads the updated version of a module.
reload() Reloads an already imported module.
Import Statement from imp import reload
Main Purpose Use updated module code without restarting Python.
Works On Already imported modules.

Important Interview Questions

  1. What is module reloading in Python?
  2. Why is reload() required?
  3. When should we use reload()?
  4. Which module provides the reload() function according to this tutorial?
  5. Can Python automatically reload a modified module?
  6. What happens if a module is modified after it has already been imported?
  7. What is the syntax of the reload() function?
  8. What are the advantages of using reload()?

Important Notes

  • By default, a module is loaded only once.
  • Importing the same module multiple times does not reload it.
  • Modifying a module does not automatically update it in the current program.
  • The reload() function is used to reload an already imported module.
  • According to this tutorial, reload() should be imported from the imp module.
  • Reloading allows the latest version of the module to be used without restarting Python.
  • The module must already be imported before it can be reloaded.

Introduction to dir() Function

When working with Python modules, we often need to know what variables, functions, classes, and built-in attributes are available inside a module.

Python provides a built-in function called dir() for this purpose.

The dir() function displays all the members available in a specified module.

This makes it easy to explore a module without reading its source code.

dir() Function

The dir() function is used to display all members of a module.

It returns:

  • Variables
  • Functions
  • Classes
  • Built-in attributes

available in the specified module.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - Display Members of math Module

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The output contains all the available members of the math module.

The exact output may vary depending on the Python version being used, but it always includes the members provided by that module.

Understanding dir()

The dir() function is useful when:

  • We want to know what members are available in a module.
  • We do not remember the exact function names.
  • We want to explore a module.

Example - Exploring math Module

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Explanation

First, the math module is imported.

The dir(math) function returns a list containing every available member of the module.

The returned list is stored in the variable members and then displayed.

Common Members Displayed by dir(math)

Member Purpose
sqrt() Returns the square root of a number.
ceil() Returns the smallest integer greater than or equal to a number.
floor() Returns the largest integer less than or equal to a number.
factorial() Returns the factorial of a number.
sin() Returns the sine of an angle.
cos() Returns the cosine of an angle.
tan() Returns the tangent of an angle.
pi Mathematical constant π.
e Euler's mathematical constant.

Difference Between Importing and Reloading

Import Reload
Loads a module for the first time. Loads the updated version of an already imported module.
Uses the import statement. Uses the reload() function.
Executed once. Executed whenever required.

Advantages of dir()

  • Displays all members of a module.
  • Helps discover available functions.
  • Useful for beginners learning new modules.
  • Reduces the need to memorize function names.
  • Helps during debugging and development.
  • Provides information about built-in attributes.

Real-World Applications

  • Exploring built-in Python modules.
  • Learning third-party libraries.
  • Debugging unfamiliar modules.
  • Finding available functions quickly.
  • Understanding APIs without reading source code.

Complete Summary

Topic Description
Reloading Loads the updated version of a module.
reload() Reloads an already imported module.
from imp import reload Imports the reload() function.
dir() Displays all members of a module.

Important Notes

  • By default, a module is loaded only once.
  • Modifying a module does not automatically update it in the current program.
  • The reload() function is used to reload an already imported module.
  • According to this tutorial, reload() should be imported from the imp module.
  • The dir() function displays all members of a module.
  • dir() helps identify the available variables, functions, classes, and built-in attributes in a module.

Important Interview Questions

  1. What is the purpose of the dir() function?
  2. What does the dir() function return?
  3. Can dir() display functions available in a module?
  4. How do you display all members of the math module?
  5. What is the difference between import and reload()?
  6. Why is the dir() function useful?
  7. Does dir() display built-in attributes?
  8. When should you use dir() while programming?

Introduction to Special Properties

Whenever a Python module is executed, the Python interpreter automatically adds several special properties to that module.

These properties are created internally by Python and are mainly used by the interpreter for managing the execution of the program.

Although these properties are generated automatically, they can also be accessed from our Python programs whenever required.

These special properties provide useful information about the currently executing module.

Special Properties Added by Python

For every module, at the time of execution, the Python interpreter automatically adds some special properties for internal use.

These properties can also be accessed in our program.

Some of the important special properties are:

  • __builtins__
  • __cached__
  • __doc__
  • __file__
  • __loader__
  • __name__
  • __package__
  • __spec__

Understanding the Special Properties

Each special property stores different information related to the current module.

Some properties describe the module itself, while others help Python manage module loading and execution.

These properties are created automatically, so programmers normally do not need to define them manually.

Program to Access Special Properties

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Program Explanation

The program simply prints every important special property automatically added by Python.

Each statement displays information maintained internally by the Python interpreter.

The displayed values may vary depending on the Python version and execution environment.

__builtins__ Property

__builtins__ refers to the built-in Python module that contains all built-in functions, exceptions, and objects.

Examples include:

  • print()
  • len()
  • input()
  • type()
  • range()

This property allows Python to access all built-in functionality.

__cached__ Property

__cached__ stores information about the compiled version of the module.

If no compiled version exists, its value may be None.

Python internally uses this property while working with compiled module files.

__doc__ Property

__doc__ stores the documentation string (Docstring) of the module.

If no documentation string is available, Python returns None.

__file__ Property

__file__ stores the name or path of the currently executing Python file.

In the example, it displays:

test.py

__loader__ Property

__loader__ contains information about the object responsible for loading the module.

Python uses this loader internally while importing modules.

__name__ Property

__name__ stores information about how the current file is executed.

If the file is executed directly, its value becomes __main__.

If the file is imported as a module, its value becomes the module name.

This important property will be discussed in detail in the next section.

__package__ Property

__package__ stores the package name to which the module belongs.

If the file does not belong to any package, its value is generally None.

__spec__ Property

__spec__ stores information related to the module specification.

This property is mainly used internally by Python's import system.

Summary of Special Properties

Special Property Description
__builtins__ Reference to Python built-in module.
__cached__ Information about compiled module.
__doc__ Module documentation string.
__file__ Name or path of the current Python file.
__loader__ Object responsible for loading the module.
__name__ Execution information of the module.
__package__ Name of the package containing the module.
__spec__ Module specification information.

Advantages of Special Properties

  • Provide internal information about modules.
  • Help Python manage program execution.
  • Useful for debugging.
  • Allow developers to inspect module details.
  • Help understand how modules are loaded.

Real-World Applications

  • Debugging Python programs.
  • Building Python frameworks.
  • Developing reusable libraries.
  • Understanding module loading.
  • Creating developer tools and utilities.

Quick Summary

Topic Description
Special Properties Automatically added by the Python interpreter.
Purpose Provide internal information about the executing module.
Created By Python Interpreter.
Access Can be accessed directly inside a Python program.

Important Interview Questions

  1. What are Special Properties in Python?
  2. Who creates Special Properties?
  3. When are these properties added to a module?
  4. What is the purpose of __builtins__?
  5. What does __file__ store?
  6. What is stored in __doc__?
  7. What is the use of __loader__?
  8. What information is stored in __package__?
  9. What is __spec__?
  10. Which special property stores execution information?

Important Notes

  • Python automatically adds several special properties to every module.
  • These properties are mainly used internally by the Python interpreter.
  • Programmers can also access these properties directly.
  • __builtins__ provides access to Python's built-in objects.
  • __doc__ stores the module documentation string.
  • __file__ stores the module filename.
  • __loader__ stores loader information.
  • __package__ stores package information.
  • __spec__ stores module specification details.
  • __name__ is one of the most important special properties and is explained separately in the next section.

Introduction to __name__

__name__ is one of the most important special variables automatically added by the Python interpreter.

Every Python module contains this variable.

The value stored in __name__ depends on how the Python file is executed.

Because of this behavior, __name__ is widely used while creating reusable Python modules.

What is __name__?

The special variable __name__ identifies whether a Python file is executed directly or imported as a module.

Python automatically assigns an appropriate value during program execution.

Value of __name__

Execution Method Value of __name__
Executed directly __main__
Imported as a module Name of the module

Why is __name__ Useful?

Sometimes a Python file contains reusable functions as well as testing code.

We want the testing code to execute only when the file is run directly.

If another program imports that file as a module, only the reusable functions should become available.

The __name__ variable helps us achieve this behavior.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - module1.py

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Program - test.py

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output - Executing module1.py Directly

Output - Executing test.py

Explanation - Executing module1.py

When module1.py is executed directly, Python assigns:

__name__ = "__main__"

The condition:

if __name__ == "__main__":

becomes true.

Therefore, the statements inside the if block are executed.

Explanation - Importing module1

When module1 is imported into another program, Python assigns:

__name__ = "module1"

The condition:

if __name__ == "__main__":

becomes false.

Hence, the statements inside the if block are not executed.

Only the module members become available for use.

Execution Flow

Python File Starts
        │
        ▼
Is File Executed Directly?
        │
   ┌────┴────┐
   │         │
  Yes        No
   │         │
   ▼         ▼
__name__   __name__
= "__main__" = Module Name
   │         │
   ▼         ▼
if Block    Skip if Block
Executed
        

Advantages of Using __name__

  • Separates testing code from reusable code.
  • Makes modules reusable.
  • Prevents unnecessary execution when importing modules.
  • Improves code organization.
  • Widely used in professional Python projects.

Practical Uses

  • Testing Python modules.
  • Creating reusable libraries.
  • Writing standalone scripts.
  • Developing large Python applications.
  • Separating demonstration code from actual module code.

Comparison

Executed Directly Imported as Module
__name__ = "__main__" __name__ = module_name
if block executes. if block is skipped.
Used for standalone execution. Used for reusable modules.

Complete Summary

Topic Description
__name__ Special variable automatically added by Python.
Executed Directly Value becomes __main__.
Imported Module Value becomes the module name.
Main Purpose Separate reusable code from testing code.

Important Notes

  • __name__ is automatically created by the Python interpreter.
  • Its value depends on how the file is executed.
  • Direct execution assigns __main__.
  • Importing assigns the module name.
  • The statement if __name__ == "__main__": is one of the most commonly used statements in Python.
  • It prevents testing code from executing when the module is imported.

Important Interview Questions

  1. What is the purpose of the __name__ variable?
  2. Who creates the __name__ variable?
  3. What is the value of __name__ when a file is executed directly?
  4. What is the value of __name__ when a file is imported?
  5. Why is if __name__ == "__main__": used?
  6. Can reusable modules contain testing code?
  7. What happens when a module is imported?
  8. Where is the __name__ variable commonly used?
  9. Why is __name__ important in large projects?
  10. What are the advantages of using __name__?

Introduction to math Module

Python provides an inbuilt math module.

This module defines several functions that can be used for performing mathematical operations.

The math module contains many predefined functions, constants, and utilities that simplify mathematical calculations.

Instead of writing complex mathematical formulas manually, we can use the functions available in the math module.

Main Functions in math Module

The main important functions available in the math module are:

  1. sqrt(x)
  2. ceil(x)
  3. floor(x)
  4. fabs(x)
  5. log(x)
  6. sin(x)
  7. tan(x)

Importing the math Module

Before using the functions available in the math module, we must import the module.

To use all functions available in the module, import all members as shown below:

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

sqrt() Function

The sqrt() function returns the square root of a number.

Example - sqrt()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The square root of 4 is 2.

Therefore, the sqrt() function returns 2.0.

ceil() Function

The ceil() function returns the smallest integer greater than or equal to the given value.

Example - ceil()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The value 10.1 lies between 10 and 11.

The smallest integer greater than or equal to 10.1 is 11.

Hence, ceil(10.1) returns 11.

floor() Function

The floor() function returns the largest integer less than or equal to the given value.

Example - floor()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The value 10.1 lies between 10 and 11.

The largest integer less than or equal to 10.1 is 10.

Therefore, floor(10.1) returns 10.

fabs() Function

The fabs() function returns the absolute (positive) value of a number.

Whether the given number is positive or negative, the returned value is always positive.

Example - fabs()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The absolute value removes the negative sign.

Therefore:

  • fabs(-10.6) returns 10.6.
  • fabs(10.6) also returns 10.6.

Complete Program

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Complete Output

Program Explanation

  1. The math module is imported.
  2. sqrt(4) calculates the square root of 4.
  3. ceil(10.1) returns the next greater integer.
  4. floor(10.1) returns the previous smaller integer.
  5. fabs(-10.6) converts the negative value into a positive value.
  6. fabs(10.6) returns the same positive value.

Advantages of math Module

  • Provides predefined mathematical functions.
  • Reduces the need to write complex mathematical formulas.
  • Produces accurate mathematical results.
  • Makes programs shorter and easier to understand.
  • Useful for scientific and engineering applications.

Real-World Applications

  • Scientific calculations.
  • Engineering software.
  • Financial applications.
  • Data analysis.
  • Artificial Intelligence.
  • Machine Learning.
  • Computer graphics.

Quick Summary

Function Purpose
sqrt(x) Returns the square root of a number.
ceil(x) Returns the smallest integer greater than or equal to a number.
floor(x) Returns the largest integer less than or equal to a number.
fabs(x) Returns the absolute value of a number.

Important Interview Questions

  1. What is the purpose of the math module?
  2. How do you import all members of the math module?
  3. What does the sqrt() function return?
  4. What is the difference between ceil() and floor()?
  5. What is the purpose of the fabs() function?
  6. Which function returns the absolute value?
  7. Which function returns the square root?
  8. Name four commonly used functions of the math module.

Quiz

  1. Which module provides advanced mathematical functions?
    A. random
    B. math
    C. os
    D. sys
    Answer: B
  2. Which function returns the square root?
    A. pow()
    B. sqrt()
    C. root()
    D. abs()
    Answer: B
  3. What is the output of ceil(10.1)?
    A. 10
    B. 10.1
    C. 11
    D. 12
    Answer: C
  4. What is the output of floor(10.1)?
    A. 9
    B. 10
    C. 11
    D. 10.1
    Answer: B
  5. Which function returns the absolute value?
    A. fabs()
    B. absvalue()
    C. positive()
    D. absolute()
    Answer: A

Other Important Functions in math Module

In addition to sqrt(), ceil(), floor(), and fabs(), the math module also provides several other useful mathematical functions.

Some of the important functions are:

  • log(x)
  • sin(x)
  • tan(x)

These functions are available for performing various mathematical calculations.

log() Function

The log() function is used to calculate the logarithm of a number.

It is commonly used in scientific calculations, engineering, statistics, and data analysis.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The log() function returns the natural logarithm of the specified number.

In the above example, the natural logarithm of 10 is displayed.

sin() Function

The sin() function returns the sine value of the specified angle.

This function is mainly used in trigonometry and scientific calculations.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The sine value of 0 is 0.

Hence the output is 0.0.

tan() Function

The tan() function returns the tangent value of the specified angle.

Like the sin() function, it is also used in trigonometric calculations.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Output

Explanation

The tangent value of angle 0 is 0.

Therefore, the output is 0.0.

Getting Help for the math Module

Python provides the built-in help() function to obtain complete information about any module.

We can use this function to learn about all the functions, constants, variables, and documentation available in the math module.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Explanation

The help(math) statement displays:

  • All functions
  • Variables
  • Constants
  • Documentation

available in the math module.

Understanding the Functions

Function Purpose
sqrt(x) Returns the square root of x.
ceil(x) Returns the smallest integer greater than or equal to x.
floor(x) Returns the largest integer less than or equal to x.
fabs(x) Returns the absolute value of x.
log(x) Returns the logarithm of x.
sin(x) Returns the sine value of x.
tan(x) Returns the tangent value of x.

Real-World Applications

  • Scientific calculations.
  • Engineering software.
  • Artificial Intelligence.
  • Machine Learning.
  • Data Analysis.
  • Financial calculations.
  • Computer Graphics.
  • Game Development.

Complete Summary

Topic Description
math Module Built-in module for mathematical operations.
sqrt() Returns the square root.
ceil() Returns the smallest integer greater than or equal to a value.
floor() Returns the largest integer less than or equal to a value.
fabs() Returns the absolute value.
log() Returns the logarithm.
sin() Returns the sine function value.
tan() Returns the tangent function value.
help(math) Displays complete information about the module.

Important Notes

  • The math module is a built-in Python module.
  • It provides many functions for mathematical operations.
  • sqrt() returns the square root of a number.
  • ceil() returns the smallest integer greater than or equal to the given value.
  • floor() returns the largest integer less than or equal to the given value.
  • fabs() always returns the positive (absolute) value of a number.
  • The math module also provides functions such as log(), sin(), and tan().
  • We can use help(math) to view complete information about the math module.

Important Interview Questions

  1. What is the purpose of the math module?
  2. What does the log() function return?
  3. What is the use of the sin() function?
  4. What is the use of the tan() function?
  5. Why do we use help(math)?
  6. Which function returns the absolute value?
  7. Which function returns the square root?
  8. Name any four functions provided by the math module.
  9. Is the math module built into Python?
  10. Which function displays complete information about a module?

Introduction to random Module

Python provides an inbuilt module named random.

This module defines several functions to generate random numbers.

Using these functions, we can generate different random values whenever a program is executed.

Why Do We Use the random Module?

The random module is useful whenever unpredictable values are required.

We can use these functions while:

  • Developing games.
  • Cryptography.
  • Generating random numbers on the fly for authentication.

Functions Covered in this Part

In this section, we will learn the following functions:

  1. random()
  2. uniform()

1. random() Function

The random() function always generates a floating-point value between 0 and 1.

The generated value is always greater than 0 and less than 1.

Range of random()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example - random()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The random() function generates a floating-point value every time it is called.

Each generated value lies between 0 and 1.

The value is never exactly 0 or 1.

Every execution of the program produces different values.

Important Note

Note: Every execution produces different values.

2. uniform() Function

The uniform(a, b) function returns a random floating-point number between the specified range.

Unlike random(), we can specify both the starting value and ending value.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example - uniform()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The generated value may be any floating-point number between 1 and 10.

Every execution produces different values because the numbers are generated randomly.

This function is useful whenever random decimal values are required within a specified range.

Difference Between random() and uniform()

random() uniform(a, b)
Returns a floating-point value between 0 and 1. Returns a floating-point value between the specified range.
Range is fixed. Range is decided by the programmer.
No parameters. Requires beginning and ending values.

Real-World Applications

  • Game development.
  • OTP generation.
  • Password generation.
  • Lottery systems.
  • Simulation software.
  • Testing applications using random data.
  • Cryptography-related programs.

Quick Summary

Function Purpose
random() Returns a floating-point value between 0 and 1.
uniform(a, b) Returns a floating-point value within the specified range.

Important Interview Questions

  1. What is the purpose of the random module?
  2. What type of value is returned by random()?
  3. What is the range of the random() function?
  4. What is the difference between random() and uniform()?
  5. Which function allows us to specify the range?
  6. Why do random numbers change every execution?
  7. Where is the random module commonly used?
  8. Can uniform() generate decimal values?

Integer Random Functions

The random module also provides functions to generate random integer values.

Unlike random() and uniform(), these functions generate whole numbers (integers).

In this section, we will learn:

  1. randint()
  2. randrange()

1. randint() Function

The randint(a, b) function returns a random integer between a and b.

Both the starting value and ending value are included in the generated range.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example - randint()

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The randint(1, 10) function generates a random integer between 1 and 10.

Both 1 and 10 are included in the possible output.

Each execution of the program produces different random numbers.

Important Note

  • The generated value is always an integer.
  • Both the beginning and ending values are included.
  • Every execution produces different random values.

2. randrange() Function

The randrange() function returns a random integer from the specified range.

Its behavior is similar to Python's built-in range() function.

It is useful when random values are required from a sequence.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example 1

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The statement randrange(10) generates a random integer from 0 to 9.

The ending value 10 is not included.

Example 2

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The statement randrange(1, 11) generates a random integer between 1 and 10.

The ending value 11 is excluded.

Example 3

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The third parameter specifies the step value.

In this example, only odd numbers are generated because the step size is 2.

Possible values are:

1, 3, 5, 7, 9, 11, 13, 15, 17, 19

Difference Between randint() and randrange()

randint() randrange()
Returns a random integer. Returns a random integer from a specified range.
Ending value is included. Ending value is excluded.
No step value. Supports an optional step value.
Simple syntax. Works similar to the range() function.

Real-World Applications

  • Dice simulation.
  • Lottery number generation.
  • Card games.
  • Quiz applications.
  • OTP generation.
  • Random test case generation.
  • Gaming applications.

Quick Summary

Function Purpose
randint(a, b) Returns a random integer between a and b (inclusive).
randrange() Returns a random integer from the specified range.

Important Interview Questions

  1. What is the difference between randint() and randrange()?
  2. Does randint() include the ending value?
  3. Does randrange() include the ending value?
  4. Which function supports a step value?
  5. What is the output range of randrange(10)?
  6. How do you generate only odd numbers using the random module?
  7. Which function behaves like Python's range()?
  8. Name two functions used to generate random integers.

Sequence Functions in random Module

The random module also provides functions that work with sequences such as lists and tuples.

These functions do not always generate random numbers. Instead, they can select random elements from a sequence.

In this section, we will learn the choice() function.

5. choice() Function

The choice() function does not return a random number.

It returns a random object from the given list or tuple.

Every time the function is executed, it may return a different element from the sequence.

Syntax

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Example

🐍
main.py
Python 3 Runtime
Loading Editor...
Output Preview
No output captured.

Sample Output

Explanation

The list contains five names.

Each time choice(list) is called, Python randomly selects one element from the list.

The selected element is returned and displayed.

The same element may appear multiple times because every selection is independent.

Important Points

  • choice() works with sequences such as lists and tuples.
  • It returns only one element at a time.
  • The returned element is selected randomly.
  • The same value can be selected multiple times.
  • It does not generate a random number.

Comparison of Sequence Functions

Function Returns
random() Random floating-point number between 0 and 1.
uniform(a, b) Random floating-point number within the specified range.
randint(a, b) Random integer between the specified range.
randrange() Random integer from the specified range.
choice() Random object from a list or tuple.

Real-World Applications

  • Selecting a random winner from a list.
  • Displaying random motivational quotes.
  • Choosing random quiz questions.
  • Selecting random names in classrooms.
  • Random card selection in games.
  • Random recommendation systems.

Summary of random Module Functions

Function Description
random() Returns a random float between 0 and 1.
uniform(a, b) Returns a random float between a and b.
randint(a, b) Returns a random integer between a and b.
randrange() Returns a random integer from the specified range.
choice() Returns a random object from a sequence.

Important Interview Questions

  1. What is the purpose of the choice() function?
  2. Does choice() return a random number?
  3. Which data structures are supported by choice()?
  4. Can the same element be selected multiple times?
  5. What is the difference between choice() and randint()?
  6. Name five important functions of the random module.
  7. Which function returns a random object from a sequence?
  8. Where is the choice() function commonly used?

Complete Chapter Summary

Topic Description
Module Collection of functions, variables, and classes stored in a Python file.
User-defined Module Module created by the programmer.
import Imports a module.
Module Aliasing Renames a module using the as keyword.
from ... import Imports selected members from a module.
from ... import * Imports all members of a module.
Member Aliasing Renames imported members.
reload() Reloads an already imported module.
dir() Displays all members of a module.
__name__ Identifies whether a Python file is executed directly or imported as a module.
math Module Provides mathematical functions.
random Module Provides functions to generate random numbers and select random elements.

Summary of random Module Functions

Function Description
random() Returns a random floating-point number between 0 and 1.
uniform(a, b) Returns a random floating-point number between a and b.
randint(a, b) Returns a random integer between a and b (inclusive).
randrange() Returns a random integer from the specified range.
choice() Returns a random object from a sequence.

Important Notes

  1. The random module is a built-in Python module.
  2. random() returns a floating-point number between 0 and 1.
  3. uniform() returns a floating-point number within the specified range.
  4. randint() returns an integer within the specified range.
  5. randrange() returns a random integer from the given range and also supports a step value.
  6. choice() returns a random element from a list or tuple.
  7. The random module is commonly used in games, cryptography, and authentication systems.

Advantages of random Module

  • Easy to generate random values.
  • Provides both integer and floating-point random numbers.
  • Can randomly select elements from lists and tuples.
  • Useful for simulations and testing.
  • Reduces the need to implement custom random number algorithms.
  • Built into Python, so no external installation is required.

Real-World Applications

  • Game development.
  • Lottery systems.
  • Online quiz applications.
  • Password and OTP generation.
  • Authentication systems.
  • Simulation software.
  • Random testing and test data generation.
  • Artificial Intelligence and Machine Learning experiments.

Important Interview Questions

  1. What is the purpose of the random module?
  2. Which function returns a floating-point number between 0 and 1?
  3. What is the difference between random() and uniform()?
  4. What is the difference between randint() and randrange()?
  5. Which function returns a random object from a list?
  6. Can choice() return duplicate values?
  7. Which random function supports a step value?
  8. Which functions generate floating-point numbers?
  9. Which functions generate integers?
  10. List five functions available in the random module.
  11. Where is the random module commonly used?
  12. Is the random module built into Python?

🧠 Test Your Knowledge

87 Questions

Progress: 0 / 87
Keep Going!Python - Math Module