Functions as Objects

Functions as Objects and First-Class Functions in Python

In Python, functions are first-class objects, which means they can be:

  1. Assigned to variables
  2. Passed as arguments to other functions
  3. Returned from other functions
  4. Stored in data structures
  5. Have attributes and methods

1. Functions as Objects

In Python, everything is an object, including functions. When you define a function, you’re creating a function object.

python

def greet(name):
    return f"Hello, {name}!"

# The function is an object with type 'function'
print(type(greet))  # <class 'function'>
print(greet)        # <function greet at 0x...>

# Functions have attributes
print(greet.__name__)  # 'greet'
print(greet.__doc__)   # None (unless you add a docstring)

2. Assigning Functions to Variables

python

def square(x):
    return x * x

# Assign function to variable
my_func = square

# Use the variable as a function
result = my_func(5)
print(result)  # 25

# The variable references the same function
print(my_func is square)  # True

3. Passing Functions as Arguments

python

def apply_operation(func, value):
    """Apply a function to a value"""
    return func(value)

def double(x):
    return x * 2

def triple(x):
    return x * 3

# Pass different functions as arguments
print(apply_operation(double, 5))  # 10
print(apply_operation(triple, 5))  # 15
print(apply_operation(square, 5))  # 25

4. Returning Functions from Functions

python

def create_multiplier(factor):
    """Return a function that multiplies by the given factor"""
    def multiplier(x):
        return x * factor
    return multiplier

# Create specialized functions
double = create_multiplier(2)
triple = create_multiplier(3)

print(double(5))  # 10
print(triple(5))  # 15

5. Storing Functions in Data Structures

python

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):
    return a / b

# Store functions in a list
operations = [add, subtract, multiply, divide]

# Use functions from the list
a, b = 10, 5
for operation in operations:
    result = operation(a, b)
    print(f"{operation.__name__}({a}, {b}) = {result}")

6. Practical Example: Custom Sorting

python

# List of people with name and age
people = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30},
    {"name": "Charlie", "age": 20}
]

# Sort by age using a lambda function
people_sorted_by_age = sorted(people, key=lambda person: person["age"])
print("Sorted by age:", people_sorted_by_age)

# Sort by name length
people_sorted_by_name_length = sorted(people, key=lambda person: len(person["name"]))
print("Sorted by name length:", people_sorted_by_name_length)

7. Function Attributes and Methods

python

def example_function(x):
    """This is a docstring"""
    return x ** 2

# Add custom attributes
example_function.author = "John Doe"
example_function.created_at = "2023-01-01"

# Access attributes
print(example_function.__name__)    # 'example_function'
print(example_function.__doc__)     # 'This is a docstring'
print(example_function.author)      # 'John Doe'
print(example_function.created_at)  # '2023-01-01'

8. Higher-Order Functions

Python has built-in higher-order functions that accept other functions as arguments:

python

numbers = [1, 2, 3, 4, 5]

# map() applies a function to each element
squared = list(map(lambda x: x**2, numbers))
print(squared)  # [1, 4, 9, 16, 25]

# filter() keeps elements where function returns True
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)  # [2, 4]

# sorted() with custom key
words = ["apple", "banana", "cherry", "date"]
sorted_by_length = sorted(words, key=len)
print(sorted_by_length)  # ['date', 'apple', 'banana', 'cherry']

Key Points:

  • First-class functions mean functions can be treated like any other object
  • This enables functional programming patterns in Python
  • Functions can be passed around and used flexibly
  • Enables powerful patterns like decoratorsclosures, and callback functions
  • Makes code more modular and reusable

This flexibility is what makes Python such a powerful language for both object-oriented and functional programming paradigms.

Similar Posts

  • Currency Converter

    Challenge: Currency Converter Class with Accessors & Mutators Objective: Create a CurrencyConverter class that converts an amount from a foreign currency to your local currency, using accessor and mutator methods. 1. Class Properties (Instance Variables) 2. Class Methods 3. Task Instructions

  • Programs

    Weekly Wages Removing Duplicates even ,odd Palindrome  Rotate list Shuffle a List Python random Module Explained with Examples The random module in Python provides functions for generating pseudo-random numbers and performing random operations. Here’s a detailed explanation with three examples for each important method: Basic Random Number Generation 1. random.random() Returns a random float between 0.0 and 1.0 python import…

  • String Validation Methods

    Complete List of Python String Validation Methods Python provides several built-in string methods to check if a string meets certain criteria. These methods return True or False and are useful for input validation, data cleaning, and text processing. 1. Case Checking Methods Method Description Example isupper() Checks if all characters are uppercase “HELLO”.isupper() → True islower() Checks if all…

  • Python Program to Check Pangram Phrases

    Python Program to Check Pangram Phrases What is a Pangram? A pangram is a sentence or phrase that contains every letter of the alphabet at least once. Method 1: Using Set Operations python def is_pangram_set(phrase): “”” Check if a phrase is a pangram using set operations “”” # Convert to lowercase and remove non-alphabetic characters…

  • Python Nested Lists

    Python Nested Lists: Explanation & Examples A nested list is a list that contains other lists as its elements. They are commonly used to represent matrices, tables, or hierarchical data structures. 1. Basic Nested List Creation python # A simple 2D list (matrix) matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]…

Leave a Reply

Your email address will not be published. Required fields are marked *