Python Academy · Lesson

Functions as First-Class Objects

Understand closures and passing functions as arguments.

Lesson 1 of 414 steps

Functions as First-Class Objects is a free Python Academy lesson on CoddyKit. This is lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Python Academy learning path, and your progress syncs across the web and the CoddyKit app. The Python Academy course includes 4 lessons in total.

Introduction

In Python, functions are first-class objects: they can be passed as arguments, returned, and stored in data structures.

Functions are Objects

def double(x): return x*2 creates a function object. double is just a name. You can assign it: fn = double; fn(5) works.
def double(x): return x * 2
fn = double
print(fn(5))
print(type(fn))

Passing Functions as Arguments

def apply(func, val): return func(val) — func is a callable argument. This is higher-order programming.
def apply(func, val): return func(val)
print(apply(abs, -7))
print(apply(str, 42))

Storing Functions in Containers

ops = [add, sub, mul] stores function objects in a list. Iterate and call: for op in ops: op(a, b).
ops = [str.upper, str.lower, str.strip]
for op in ops:
    print(op('  Hello  '))

Returning Functions

A function can return another function. def make_adder(n): def adder(x): return x+n; return adder
def make_adder(n):
    def adder(x): return x + n
    return adder
add10 = make_adder(10)
print(add10(5), add10(20))

Closures

A closure captures variables from the enclosing scope. The inner function 'closes over' n in make_adder.
def counter(start=0):
    count = [start]
    def inc():
        count[0] += 1
        return count[0]
    return inc
c = counter()
print(c(), c(), c())

Lambda as Anonymous Function

lambda x: x*2 is a one-expression anonymous function. Useful as short callbacks but name it if the logic is non-trivial.
nums = [3, 1, 4, 1, 5]
print(sorted(nums, key=lambda x: -x))

map() and filter()

map(func, iterable) applies func to each element. filter(pred, iterable) keeps elements where pred is True.
nums = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, nums)))
print(list(filter(lambda x: x%2==0, nums)))

functools.reduce()

reduce(func, seq) folds a sequence: reduce(lambda a,b: a+b, [1,2,3,4]) gives 10.
from functools import reduce
print(reduce(lambda a,b: a*b, [1,2,3,4,5]))

Callable Check

callable(obj) returns True if obj can be called. Functions, classes, and objects with __call__ are callable.
print(callable(print))
print(callable(42))
class C:
    def __call__(self): pass
print(callable(C()))

Function Introspection

func.__name__, func.__doc__, func.__annotations__, inspect.signature(func) give metadata about the function.
import inspect
def greet(name: str) -> str:
    '''Returns a greeting.'''
    return f'Hi {name}'
print(greet.__name__, greet.__annotations__)
print(inspect.signature(greet))

Quick Check

What is a closure in Python?

Recap

Functions are first-class objects. Pass as args, return from functions, store in containers. Closures capture enclosing scope. lambda for simple one-liners.

Keep Going

Excellent progress! Keep going to master the next concept.
Free to start

Learn Python with an AI tutor — free

Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.

Courses
76
Lessons
320

Frequently Asked Questions

Is the “Functions as First-Class Objects” lesson free?

Yes — the full text of “Functions as First-Class Objects” is free to read here on the web. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Python Academy course, upgrade to CoddyKit PRO. The Python Academy course includes 4 lessons in total.

What will I learn in “Functions as First-Class Objects”?

Understand closures and passing functions as arguments. You practise Python Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Python Academy?

No prior experience is required. Python Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 1 of 4.

How long does the “Functions as First-Class Objects” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Python Academy lesson?

Yes. Every Python Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Functions as First-Class Objects
  2. Writing Custom Decorators
  3. The @property Decorator
  4. @classmethod and @staticmethod
← Back to Python Academy