Skip to content

Commit 73b35aa

Browse files
committed
1.2
1 parent 29b7d87 commit 73b35aa

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

1.2.md

+52-1
Original file line numberDiff line numberDiff line change
@@ -217,5 +217,56 @@ Python 定义了大量的函数,包括上一节提到的运算符函数,但
217217

218218
注:当我们说“数字求值为数值”的时候,我们的实际意思是 Python 解释器将数字求解为数值。Python 的解释器使编程语言具有了这个意义。假设解释器是一个固定的程序,行为总是一致,我们就可以说数字(以及表达式)自己在 Python 程序的上下文中会求解为值。
219219

220-
## 1.2.6 函数范式
220+
## 1.2.6 函数图解
221+
222+
当我们继续构建求值的正式模型时,我们会发现解释器内部状态的图解有助于我们跟踪求值过程的发展。这些图解的必要部分是函数的表示。
223+
224+
**纯函数:**具有一些输入(参数)以及返回一些输出(调用结果)的函数。内建函数
225+
226+
```py
227+
>>> abs(-2)
228+
2
229+
```
230+
231+
可以描述为接受输入并产生输出的小型机器。
232+
233+
![](img/function_abs.png)
234+
235+
`abs`是纯函数。纯函数具有一个特性,调用它们时除了返回一个值之外没有其它效果。
236+
237+
**非纯函数:**除了返回一个值之外,调用非纯函数会产生副作用,这会改变解释器或计算机的一些状态。一个普遍的副作用就是在返回值之外生成额外的输出,例如使用`print`函数:
238+
239+
240+
```py
241+
>>> print(-2)
242+
-2
243+
>>> print(1, 2, 3)
244+
1 2 3
245+
```
246+
247+
虽然这些例子中的`print``abs`看起来很像,但它们本质上以不同方式工作。`print`的返回值永远是`None`,它是一个 Python 特殊值,表示没有任何东西。Python 交互式解释器并不会自动打印`None`值。这里,`print`自己打印了输出,作为调用中的副作用。
248+
249+
![](img/function_print.png)
250+
251+
调用`print`的嵌套表达式会凸显出它的非纯特性:
252+
253+
```py
254+
>>> print(print(1), print(2))
255+
1
256+
2
257+
None None
258+
```
259+
260+
如果你发现自己不能预料到这个输出,画出表达式树来弄清为什么这个表达式的求值会产生奇怪的输出。
261+
262+
要当心`print`!它的返回值为`None`,意味着它不应该在赋值语句中用作表达式:
263+
264+
```py
265+
>>> two = print(2)
266+
2
267+
>>> print(two)
268+
None
269+
```
270+
271+
**签名:**不同函数具有不同的允许接受的参数数量。为了跟踪这些必备条件,我们需要以一种展示函数名称和参数名称的方式,画出每个函数。`abs`函数值接受一个叫作`number`的参数,向它提供更多或更少的参数会产生错误。`print`函数可以接受任意数量的参数,所以它渲染为`print(...)`。函数的可接受参数的描述叫做函数的签名。
221272

img/function_abs.png

6.26 KB
Loading

img/function_print.png

13.3 KB
Loading

0 commit comments

Comments
 (0)