File tree 3 files changed +52
-1
lines changed
3 files changed +52
-1
lines changed Original file line number Diff line number Diff line change @@ -217,5 +217,56 @@ Python 定义了大量的函数,包括上一节提到的运算符函数,但
217
217
218
218
注:当我们说“数字求值为数值”的时候,我们的实际意思是 Python 解释器将数字求解为数值。Python 的解释器使编程语言具有了这个意义。假设解释器是一个固定的程序,行为总是一致,我们就可以说数字(以及表达式)自己在 Python 程序的上下文中会求解为值。
219
219
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(...) ` 。函数的可接受参数的描述叫做函数的签名。
221
272
You can’t perform that action at this time.
0 commit comments