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

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.

主站蜘蛛池模板: 永德县| 吐鲁番市| 丹巴县| 瑞安市| 讷河市| 屯留县| 米脂县| 灵丘县| 天气| 华亭县| 迁安市| 原平市| 雅江县| 靖西县| 双桥区| 克东县| 湛江市| 漾濞| 和顺县| 广东省| 景谷| 平原县| 阳朔县| 乌鲁木齐市| 蛟河市| 马关县| 罗定市| 山阴县| 岚皋县| 从江县| 雷山县| 福安市| 斗六市| 鄱阳县| 会东县| 菏泽市| 光山县| 齐齐哈尔市| 大兴区| 贡觉县| 阿尔山市|