|
4 | 4 | "cell_type": "markdown",
|
5 | 5 | "metadata": {},
|
6 | 6 | "source": [
|
7 |
| - "# 列表解析和函数式编程工具 \n", |
| 7 | + "# 1. 列表解析和函数式编程工具 \n", |
8 | 8 | "列表解析能够更加通用,可以在一个列表解析中编写任意数量的嵌套的 for 循环,并且每一个都有可选的关联的 if 测试:\n",
|
9 | 9 | "```\n",
|
10 | 10 | "[expression for target1 in iterable1 [if condition1]\n",
|
|
102 | 102 | "cell_type": "markdown",
|
103 | 103 | "metadata": {},
|
104 | 104 | "source": [
|
105 |
| - "## 列表解析和矩阵 \n", |
| 105 | + "## 1.1 列表解析和矩阵 \n", |
106 | 106 | "使用 Python 编写矩阵的一个基本方法就是使用嵌套的列表结构:"
|
107 | 107 | ]
|
108 | 108 | },
|
|
347 | 347 | "collapsed": true
|
348 | 348 | },
|
349 | 349 | "source": [
|
350 |
| - "# 生成器函数和表达式 \n", |
| 350 | + "# 2. 生成器函数和表达式 \n", |
351 | 351 | "Python 提供了工具在需要的时候才产生结果,而不是立即产生结果。有两种语言结构尽可能地延迟结果创建。 \n",
|
352 | 352 | "- 生成器函数:编写为常规的 def 语句,但是使用 yield 语句一次返回一个结果,在每个结果之间挂起和继续它们的状态。\n",
|
353 | 353 | "- 生成器表达式:类似于列表解析,但是它们返回按需产生结果的一个对象,而不是构建一个结果列表。\n",
|
354 | 354 | "\n",
|
355 | 355 | "由于二者都不会一次性构建一个列表,它们节省了内存空间,而且允许计算时间分散到各个结果请求。 \n",
|
356 | 356 | "\n",
|
357 |
| - "## 生成器函数:yield VS return \n", |
| 357 | + "## 2.1 生成器函数:yield VS return \n", |
358 | 358 | "生成器函数,编写可以送回一个值并随后从其退出的地方继续的函数,因为它们随着时间产生值的一个序列。 \n",
|
359 | 359 | "\n",
|
360 | 360 | "一般来说,生成器函数和常规函数一样,然而,当创建时,生成器函数自动实现迭代协议,以便可以出现在迭代背景中。 \n",
|
|
729 | 729 | "collapsed": true
|
730 | 730 | },
|
731 | 731 | "source": [
|
732 |
| - "## 生成器表达式:迭代器遇到列表解析 \n", |
| 732 | + "## 2.2 生成器表达式:迭代器遇到列表解析 \n", |
733 | 733 | "生成器表达式就像一般的列表解析一样,但是它们是括在圆括号中而不是方括号中。"
|
734 | 734 | ]
|
735 | 735 | },
|
|
1384 | 1384 | "cell_type": "markdown",
|
1385 | 1385 | "metadata": {},
|
1386 | 1386 | "source": [
|
1387 |
| - "## 生成器是单迭代器对象 \n", |
| 1387 | + "## 2.3 生成器是单迭代器对象 \n", |
1388 | 1388 | "生成器函数和生成器表达式自身都是迭代器,并由此只支持一次活跃迭代。"
|
1389 | 1389 | ]
|
1390 | 1390 | },
|
|
1600 | 1600 | "cell_type": "markdown",
|
1601 | 1601 | "metadata": {},
|
1602 | 1602 | "source": [
|
1603 |
| - "## 示例\n", |
| 1603 | + "## 2.4 示例\n", |
1604 | 1604 | "示例只在序列中有效。 \n",
|
1605 | 1605 | "\n",
|
1606 | 1606 | "**打乱序列** \n",
|
|
1754 | 1754 | "cell_type": "markdown",
|
1755 | 1755 | "metadata": {},
|
1756 | 1756 | "source": [
|
1757 |
| - "## 示例:用迭代工具模拟 map " |
| 1757 | + "## 2.5 示例:用迭代工具模拟 map " |
1758 | 1758 | ]
|
1759 | 1759 | },
|
1760 | 1760 | {
|
|
1927 | 1927 | "cell_type": "markdown",
|
1928 | 1928 | "metadata": {},
|
1929 | 1929 | "source": [
|
1930 |
| - "# 解析语法总结 \n", |
| 1930 | + "# 3. 解析语法总结 \n", |
1931 | 1931 | "在 Python 3.X 中还有两种可用的解析表达式形式:集合解析和字典解析。\n",
|
1932 | 1932 | "- 对于集合,新的常量形式{1, 3, 2}等同于 set([1, 3, 2]),并且新的集合解析语法 `{f(x) for x in S if P(x)}` 就像是生成器表达式 `set(f(x) for x in S if P(x))`,其中 f(x) 是一个任意的表达式。\n",
|
1933 | 1933 | "- 对于字典,新的字典解析语法 `{key: val for (key, val) in zip(keys, vals)}` 像 `dict(zip(keys, vals))` 形式一样工作,并且 `{x: f(x) for x in items}` 像生成器表达式 `dict((x, f(x)) for x in items)` 一样工作。\n",
|
|
2023 | 2023 | "cell_type": "markdown",
|
2024 | 2024 | "metadata": {},
|
2025 | 2025 | "source": [
|
2026 |
| - "## 作用域和解析变量 \n", |
| 2026 | + "## 3.1 作用域和解析变量 \n", |
2027 | 2027 | "Python 3.X 中本地化四种形式的循环变量——生成器、集合、字典和列表解析中的临时循环变量名对于表达式是本地的。它们不和外部的名称冲突,也在外部不可用。和 for 循环迭代语句工作方式不同。"
|
2028 | 2028 | ]
|
2029 | 2029 | },
|
|
2147 | 2147 | "collapsed": true
|
2148 | 2148 | },
|
2149 | 2149 | "source": [
|
2150 |
| - "## 针对集合和字典的扩展的解析语法 \n", |
| 2150 | + "## 3.2 针对集合和字典的扩展的解析语法 \n", |
2151 | 2151 | "集合和字典解析都支持嵌套相关的 if 子句从结果中过滤掉元素。"
|
2152 | 2152 | ]
|
2153 | 2153 | },
|
|
2382 | 2382 | "name": "python",
|
2383 | 2383 | "nbconvert_exporter": "python",
|
2384 | 2384 | "pygments_lexer": "ipython3",
|
2385 |
| - "version": "3.6.5" |
| 2385 | + "version": "3.6.8" |
2386 | 2386 | },
|
2387 | 2387 | "toc": {
|
2388 | 2388 | "nav_menu": {},
|
|
0 commit comments