Back to Python
2026-04-037 min read

Function Call (Python Programming)

Learn Function Call (Python Programming) step by step with clear examples and exercises.

Title: Function Call (Python Programming)

Why This Matters

Function calls are a fundamental concept in Python programming that enable you to structure your code effectively and reuse functionalities. Understanding function calls can help you write efficient, maintainable, and scalable programs. They are crucial for passing tests in coding interviews, solving real-world problems, and debugging complex codebases.

Prerequisites

To follow this lesson, you should be familiar with the basics of Python programming: variables, data types, operators, and control structures such as if-else statements and loops. If you're new to Python or need a refresher, check out our Python Tutorial for Beginners.

Core Concept

A function is a self-contained block of code that performs a specific task. Functions can accept input (arguments), perform operations on the input, and return output values. In Python, functions are defined using the def keyword.

Defining a Function

To define a function in Python, you use the following syntax:

def function_name(parameters):

Function code goes here

...

return output


- `function_name` is the name of the function.
- `parameters` are optional and represent input values that the function can accept.
- The code block inside the function defines what the function does.
- `return` is used to specify the value the function returns when it's called. If no return statement is provided, the function will implicitly return `None`.

### Calling a Function

To call a function in Python, you use its name followed by parentheses `()`, which may contain arguments if the function requires any. Here's an example:

def greet(name):

print("Hello, " + name)

greet("Alice") # Output: Hello, Alice


In this example, we define a `greet` function that takes one argument (`name`) and prints a greeting message. We then call the function with the argument "Alice" to produce the output "Hello, Alice".

### Function Scope

Variables defined within a function have a local scope, meaning they are only accessible within the function itself. To access or modify variables from outside the function, you can use global variables or nonlocal keywords (see [Python Global and Nonlocal Variables](https://xqa.io/tutorials/python/global-nonlocal-variables)).

### Understanding Function Arguments

When defining a function, you can specify default values for arguments using the `=` operator. If no argument is provided when calling the function, Python uses the specified default value:

def greet(name="User"):

print("Hello, " + name)

greet() # Output: Hello, User

greet("Alice") # Output: Hello, Alice


### Variable-Length Argument Lists with `*args` and `**kwargs`

Python allows you to define function arguments that can accept an arbitrary number of arguments using the `*args` syntax for positional arguments and `**kwargs` syntax for keyword arguments. Here's an example:

def print_arguments(*args, kwargs):

for arg in args:

print("Positional argument:", arg)

for key, value in kwargs.items():

print("Keyword argument:", key, ":", value)

print_arguments(1, 2, 3, a=4, b=5)


In this example, the `print_arguments` function accepts an arbitrary number of positional arguments using the `*args` syntax and keyword arguments using the `**kwargs` syntax. When called with multiple arguments, the output will be:

Positional argument: 1

Positional argument: 2

Positional argument: 3

Keyword argument: a : 4

Keyword argument: b : 5

Worked Example

Let's create a simple calculator that performs addition, subtraction, multiplication, and division using functions for each operation. We will also define a function to calculate the square root of a number.

def add(a, b):
return a + b

def subtract(a, b):
return a - b

def multiply(a, b):
return a * b

def divide(a, b):
if b != 0:
return a / b
else:
raise ValueError("Division by zero is not allowed.")

def square_root(number):
import math
return math.sqrt(number)

num1 = 5
num2 = 3
result_add = add(num1, num2) # Addition
result_subtract = subtract(num1, num2) # Subtraction
result_multiply = multiply(num1, num2) # Multiplication
result_divide = divide(num1, num2) # Division
sqrt_num1 = square_root(num1) # Square root of num1

print("Addition:", result_add)
print("Subtraction:", result_subtract)
print("Multiplication:", result_multiply)
print("Division:", result_divide)
print("Square root of", num1, ":", sqrt_num1)

In this example, we define five functions for basic arithmetic operations and a function to calculate the square root of a number. We then create two variables num1 and num2, assign them values, and call the functions with these variables to perform calculations. The output will be:

Addition: 8
Subtraction: 2
Multiplication: 15
Division: 1.6666666666666667
Square root of 5: 2.23606797749979

Common Mistakes

Forgetting to return a value from a function

If you forget to include a return statement in your function, the function will implicitly return None, which might not be what you intended.

def greet():
print("Hello!") # Missing return statement

print(greet()) # Output: None

To fix this mistake, add a return statement with the desired value:

def greet():
print("Hello!")
return "Greeting completed."

print(greet()) # Output: Greeting completed.

Not providing arguments when calling a function

If you call a function without providing the required number or types of arguments, Python will raise an error.

def greet(name):
print("Hello, " + name)

greet() # Missing argument error

To fix this mistake, provide the necessary arguments when calling the function:

def greet(name):
print("Hello, " + name)

greet("Alice") # Output: Hello, Alice

Using a variable as a function name

If you accidentally use a variable that contains a function name as a function argument or within the function definition, it can lead to unexpected behavior. To avoid this issue, assign functions to variables only when necessary and ensure that function names are unique.

def greet():
print("Hello!")

greeting = greet # Assigning the greet function to a variable
greeting() # Output: Hello!
greeting = "Goodbye" # Now greeting is not a function anymore
greeting() # Raises a NameError: name 'greeting' is not defined

Practice Questions

  1. Write a function that calculates the area of a rectangle given its length and width.
  2. Write a function that finds the maximum number in a list of numbers.
  3. Write a function that converts Celsius to Fahrenheit using the formula F = (C * 9/5) + 32.
  4. Write a function that checks whether a given year is a leap year or not. A leap year is any year that is divisible by 4, except for years that are both divisible by 100 and not divisible by 400.
  5. Write a function that calculates the factorial of a number using recursion.
  6. Write a function that generates all possible combinations of a given list of items, taking into account repetitions.
  7. Write a function that finds all prime numbers up to a given limit.
  8. Write a function that sorts a list of tuples based on the second element in each tuple (assuming the first element is unique).
  9. Write a function that implements the binary search algorithm for finding an item in a sorted list.
  10. Write a function that calculates the number of days in a given month, taking into account leap years.

FAQ

What happens if I call a function without parentheses?

If you call a function without parentheses, Python treats it as a variable reference instead of executing the function. This can lead to unexpected behavior or errors.

def greet():
print("Hello!")

print(greet) # Output: <function __main__.greet at 0x...>
print(greet()) # Output: Hello!

How can I pass multiple arguments to a function?

To pass multiple arguments to a function, separate them with commas. You can access the arguments inside the function using their names or positional indices.

def greet(name, message):
print(message + ", " + name)

greet("Alice", "Good morning!") # Output: Good morning!, Alice

How can I return multiple values from a function?

To return multiple values from a function, use a tuple. However, keep in mind that tuples are immutable, so you cannot modify them after creation.

def calculate_area(length, width):
perimeter = 2 * (length + width)
area = length * width
return area, perimeter

area, perimeter = calculate_area(5, 3)
print("Area:", area)
print("Perimeter:", perimeter) # Output: Area: 15, Perimeter: 18

How can I define a function with a variable number of arguments?

To define a function with a variable number of arguments, use the *args syntax for positional arguments and **kwargs syntax for keyword arguments. Here's an example:**

def print_arguments(*args, **kwargs):
for arg in args:
print("Positional argument:", arg)
for key, value in kwargs.items():
print("Keyword argument:", key, ":", value)

print_arguments(1, 2, 3, a=4, b=5)

In this example, the print_arguments function accepts an arbitrary number of positional arguments using the *args syntax and keyword arguments using the **kwargs syntax. When called with multiple arguments, the output will be:**

Positional argument: 1
Positional argument: 2
Positional argument: 3
Keyword argument: a : 4
Keyword argument: b : 5
Function Call (Python Programming) | Python | XQA Learn