官术网_书友最值得收藏!

Summary

In this chapter, we've identified a number of features that characterize the functional programming paradigm. We started with first-class and higher-order functions. The idea is that a function can be an argument to a function or the result of a function. When functions become the object of additional programming, we can write some extremely flexible and generic algorithms.

The idea of immutable data is sometimes odd in an imperative and object-oriented programming language such as Python. When we start to focus on functional programming, however, we see a number of ways that state changes can be confusing or unhelpful. Using immutable objects can be a helpful simplification.

Python focuses on strict evaluation: all sub-expressions are evaluated from left-to-right through the statement. Python, however, does perform some non-strict evaluation. The or, and, and if-else logical operators are non-strict: all subexpressions are not necessarily evaluated. Similarly, a generator function is also non-strict. We can also call this eager vs. lazy. Python is generally eager, but we can leverage generator functions to create lazy evaluation.

While functional programming relies on recursion instead of the explicit loop state, Python imposes some limitations here. Because of the stack limitation and the lack of an optimizing compiler, we're forced to manually optimize recursive functions. We'll return to this topic in Chapter 6, Recursions and Reductions.

Although many functional languages have sophisticated type systems, we'll rely on Python's dynamic type resolution. In some cases, this means we'll have to write manual coercion for various types. It might also mean that we'll have to create class definitions to handle very complex situations. For the most part, however, Python's built-in rules will work very elegantly.

In the next chapter, we'll look at the core concepts of pure functions and how these fit in with Python's built-in data structures. Given this foundation, we can look at the higher-order functions available in Python and how we can define our own higher-order functions.

主站蜘蛛池模板: 丹阳市| 桂平市| 霍城县| 随州市| 渭南市| 屏边| 鹿泉市| 安义县| 义乌市| 古田县| 渑池县| 沛县| 淳安县| 南皮县| 和静县| 兴安县| 开原市| 博野县| 寿光市| 育儿| 聂荣县| 阜宁县| 玉门市| 保康县| 夏河县| 桦南县| 广水市| 柞水县| 石家庄市| 北流市| 鲜城| 宁国市| 青神县| 东安县| 沾益县| 乐亭县| 泌阳县| 黔江区| 留坝县| 清水河县| 赤壁市|