Complete List of Python Function Topics
1. Introduction to Functions
- What is a function?
- Importance and benefits of functions
- Built-in vs. user-defined functions
2. Defining and Calling Functions
- The def keyword
- Function naming conventions
- Function signature (parameters, body, return values)
- Calling a function
- Function documentation (docstrings)
3. Function Parameters and Arguments
- Positional Arguments
- Default Arguments
- Keyword Arguments
- Mixing Positional and Keyword Arguments
- Variable-Length Arguments (*args and **kwargs)
- Mutable vs Immutable Arguments
4. Return Statement
- Using return to send values from a function
- Returning multiple values (tuples, lists, dictionaries)
- Returning None
- Using return vs. print()
5. Function Scope and Lifetime
- Local Variables (inside function scope)
- Global Variables (outside function scope)
- Modifying Global Variables with global Keyword
- Nonlocal Variables in Nested Functions (nonlocal Keyword)
- LEGB Rule (Local, Enclosing, Global, Built-in Scope)
6. Lambda (Anonymous) Functions
- Syntax of lambda functions
- Lambda function with multiple arguments
- Using lambda with built-in functions (map(), filter(), reduce())
- Lambda vs. regular functions
7. Recursion in Functions
- Concept of recursion (function calling itself)
- Writing recursive functions
- Base condition in recursion
- Examples: Factorial, Fibonacci
- Tail Recursion vs. Non-Tail Recursion
8. Function Decorators
- What are decorators?
- Creating and applying decorators (@decorator_name)
- Using multiple decorators
- Function wrappers in decorators
- Built-in decorators (@staticmethod, @classmethod, @property)
9. Higher-Order Functions
- Functions as first-class citizens
- Passing functions as arguments
- Returning functions from functions
- Nested functions (Inner functions)
- Closures in Python
10. Built-in Higher-Order Functions
- map() (Applying functions to iterables)
- filter() (Filtering elements based on conditions)
- reduce() (Reducing iterables to a single value using functools.reduce())
- sorted() with key functions
11. __name__ == '__main__'
- Understanding script execution flow
- Preventing function execution when a module is imported
12. Function Annotations
- What are function annotations?
- Syntax of annotations
- Using annotations for parameter and return type hints
- Type hinting best practices
13. Generators and yield Keyword
- What are generators?
- Difference between return and yield
- Generator functions vs. normal functions
- Using next() with generators
- Generator expressions
14. Coroutines in Python
- What are coroutines?
- Using async and await in Python functions
- asyncio module for asynchronous functions
- Example: Writing an asynchronous function
15. Partial Functions (functools.partial)
- What are partial functions?
- Creating a partial function using functools.partial()
- Use cases of partial functions
16. Memoization and Caching
- Concept of memoization
- Using functools.lru_cache for caching function results
- Example: Optimizing recursive Fibonacci using lru_cache
17. Function Overloading in Python
- Why Python does not support traditional function overloading
- Achieving function overloading using default arguments
- Using functools.singledispatch for function overloading
18. Anonymous Functions with exec() and eval()
- Using exec() to dynamically create functions
- Evaluating expressions inside a function with eval()
19. Advanced Function Techniques
- Function Composition
- Currying functions using functools.partial
- Dynamic function creation using type()
- Using globals() and locals() in functions
- Using functions inside classes (Instance methods, Static methods, and Class methods)
20. Best Practices for Writing Functions
- Using meaningful function names
- Keeping functions small and single-responsibility
- Avoiding side effects (modifying global variables inside functions)
- Using docstrings for documentation
- Writing unit tests for functions
- When to use recursion vs. loops
- Optimizing performance of functions