Calling a method in this way is interesting and a useful tool, but likely not something a junior-level developer has come across before. It might help to clarify what's gong on by being more explicit. E.g.:
````
neighbourhood_generator = strategy['neighbourhood']
candidates = neighbourhood_generator(data, permutation)
heuristic = strategy['heuristic']
# Use the current strategy's heuristic to choose a new permutation.
permutation = heuristic(data, candidates)
````