The Intersection of Object-Oriented and Functional Programming
There are many aspects of Python that appear more reminiscent of structural or functional programming than object-oriented programming. Although object-oriented programming has been the most visible paradigm of the past two decades, the old models have seen a recent resurgence. As with Python's data structures, most of these tools are syntactic sugar over an underlying object-oriented implementation; we can think of them as a further abstraction layer built on top of the (already abstracted) object-oriented paradigm. In this chapter, we'll be covering a grab bag of Python features that are not strictly object-oriented:
- Built-in functions that take care of common tasks in one call
 - An alternative to method overloading
 - Functions as objects
 - File I/O and context managers
 
The case study in this chapter will revisit some of the essential algorithms of k-nearest neighbor...