Functions are blocks of reusable code that perform single actions. They provide modularity and code reusability. Functions can take arguments, including default arguments, and return values. Arguments can be passed by value for immutable objects or by reference for mutable objects. Functions can also take arbitrary and keyword arguments. Lambda functions are small anonymous functions. Documentation strings and annotations provide metadata about functions.