Functions allow programmers to organize and reuse code. Defining a function involves using the def keyword followed by the function name and parameters. Functions create a new local scope, and variables are searched in local, then global, then built-in scopes. Arguments passed to functions are assigned to parameter variables in the local scope. Functions can return values, and mutable objects like lists can be modified in-place by functions. Python also supports anonymous lambda functions defined with a single expression.