In this chapter, we discussed the benefits and drawbacks of using compiled code. We took a look at using Python's standard ctypes package to access functions stored in compiled C-compatible dynamic libraries, which is a quick way to gain access to the functionality that was written in other languages.
We also saw how to use Cython to operate with one foot at Python's higher level and C's much lower level of abstraction, with surprisingly little pain involved in bridging the gap. We can use this knowledge to optimize bottlenecks in our programs or access functionality that's only available when we operate close to the hardware.
With this, we've come to the end of this course. I hope you've learned a lot and have gained immense knowledge about Python. Keep learning!