Advanced Function Techniques
Lambda Functions
Lambda functions provide a concise way to create small, anonymous functions:
## Traditional function
def square(x):
return x ** 2
## Equivalent lambda function
square_lambda = lambda x: x ** 2
## Using lambda with built-in functions
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
Decorators
Decorators allow modification of function behavior without changing its source code:
def performance_tracker(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"Function {func.__name__} took {end - start} seconds")
return result
return wrapper
@performance_tracker
def complex_calculation(n):
return sum(range(n))
Function Techniques Comparison
Technique |
Use Case |
Complexity |
Lambda |
Simple, one-line operations |
Low |
Decorators |
Logging, timing, authentication |
Medium |
Generators |
Memory-efficient iterations |
Medium |
Closures |
Maintaining state |
High |
Generator Functions
Generator functions allow efficient memory processing:
def fibonacci_generator(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
## Memory-efficient iteration
fib_sequence = list(fibonacci_generator(10))
Function Flow Visualization
graph TD
A[Function Input] --> B{Function Type}
B -->|Lambda| C[Simple Transformation]
B -->|Decorator| D[Enhanced Functionality]
B -->|Generator| E[Lazy Evaluation]
C --> F[Return Result]
D --> F
E --> F
Type Hinting and Annotations
from typing import List, Dict, Optional
def process_data(
items: List[int],
multiplier: Optional[float] = 1.0
) -> Dict[str, float]:
processed = [item * multiplier for item in items]
return {
'original': len(items),
'processed_sum': sum(processed)
}
Functional Programming Techniques
from functools import reduce
## Combining functional programming concepts
def advanced_data_processing(numbers):
## Chaining operations
result = (
reduce(lambda x, y: x + y,
filter(lambda n: n % 2 == 0, numbers))
)
return result
Best Practices
- Use advanced techniques judiciously
- Prioritize code readability
- Understand performance implications
- Document complex function implementations
At LabEx, we recommend continuous learning and practice to master these advanced function techniques in Python.