Advanced Functions

Python FunctionsFree Lesson

Advertisement

Advanced Functions

Closures, decorators, function factories, and advanced patterns.

Overview

Master advanced function concepts.

Closures

def multiplier(factor):
    def multiply(number):
        return number * factor
    return multiply

double = multiplier(2)
triple = multiplier(3)

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

# Practical example
def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

counter_func = counter()
print(counter_func())  # 1
print(counter_func())  # 2
print(counter_func())  # 3

Decorators

# Basic decorator
def timer(func):
    import time
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} took {end - start:.4f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    import time
    time.sleep(1)
    return "Done"

# Decorator with arguments
def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(times=3)
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")
# Hello, Alice!
# Hello, Alice!
# Hello, Alice!

Function Factories

# Create functions dynamically
def create_adder(x):
    def adder(y):
        return x + y
    return adder

add5 = create_adder(5)
add10 = create_adder(10)

print(add5(3))   # 8
print(add10(3))  # 13

# Validator factory
def create_validator(min_val, max_val):
    def validator(value):
        return min_val <= value <= max_val
    return validator

age_validator = create_validator(0, 150)
print(age_validator(25))   # True
print(age_validator(200))  # False

Partial Functions

from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
cube = partial(power, exponent=3)

print(square(5))  # 25
print(cube(5))    # 125

# Practical example
def multiply(a, b):
    return a * b

double = partial(multiply, 2)
print(double(5))  # 10

Recursion

# Factorial
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

print(factorial(5))  # 120

# Fibonacci
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(10))  # 55

# Tree traversal
def traverse_tree(node):
    if node is None:
        return []
    return (
        [node.value] + 
        traverse_tree(node.left) + 
        traverse_tree(node.right)
    )

Practice

Create a memoization decorator for recursive functions.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement