8
8
9
9
编程语言是操作计算机来执行任务的手段,它也在我们组织关于过程的想法中,作为一种框架。程序用于在编程社群的成员之间交流这些想法。所以,程序必须为人类阅读而编写,并且仅仅碰巧可以让机器执行。
10
10
11
- 当我们描述一种语言时,我们应该特别注意这种语言的手段,来讲简单的想法组合为更复杂的想法 。每个强大的语言都拥有用于完成下列任务的机制:
11
+ 当我们描述一种语言时,我们应该特别注意这种语言的手段,来将简单的想法组合为更复杂的想法 。每个强大的语言都拥有用于完成下列任务的机制:
12
12
13
13
+ 基本的表达式和语句,它们由语言提供,表示最简单的构建代码块。
14
14
+ 组合的手段,复杂的元素由简单的元素通过它来构建,以及
36
36
0.9921875
37
37
```
38
38
39
- 这些算术表达式使用了中缀符号,其中运算符(例如` + ` 、` - ` 、` * ` 、` / ` )出现在操作数(数值)中间。Python包含许多方法来形成复合表达式。我们不会尝试立即将它们计算出来 ,而是在进行中介绍新的表达式形式,以及它们支持的语言特性。
39
+ 这些算术表达式使用了中缀符号,其中运算符(例如` + ` 、` - ` 、` * ` 、` / ` )出现在操作数(数值)中间。Python包含许多方法来形成复合表达式。我们不会尝试立即将它们列举出来 ,而是在进行中介绍新的表达式形式,以及它们支持的语言特性。
40
40
41
41
## 1.2.2 调用表达式
42
42
43
- 最重要的复合表达式就是调用表达式,它在一些参数上调用函数。回忆函数中,函数将一些输入值映射到输出值 。例如,` max ` 函数将它的输入映射到单个输出,输出是输入中的最大值。Python 中的函数不仅仅是输入输出的映射,它表述了计算过程。但是,Python 表示函数的方式和数学中相同。
43
+ 最重要的复合表达式就是调用表达式,它在一些参数上调用函数。回忆代数中,函数的数学概念是一些输入值到输出值的映射 。例如,` max ` 函数将它的输入映射到单个输出,输出是输入中的最大值。Python 中的函数不仅仅是输入输出的映射,它表述了计算过程。但是,Python 表示函数的方式和数学中相同。
44
44
45
45
``` py
46
46
>> > max (7.5 , 9.5 )
74
74
- 2
75
75
```
76
76
77
- (理论上)这种嵌套没有任何限制,并且 Python 解释器可以解释任何复杂的表达式。然而,人们可以会被多级嵌套搞晕 。你作为程序员的一个重要作用就是构造你自己、你的同伴以及其它在未来可能会阅读你代码的人可以解释的表达式。
77
+ (理论上)这种嵌套没有任何限制,并且 Python 解释器可以解释任何复杂的表达式。然而,人们可能会被多级嵌套搞晕 。你作为程序员的一个重要作用就是构造你自己、你的同伴以及其它在未来可能会阅读你代码的人可以解释的表达式。
78
78
79
79
最后,数学符号在形式上多种多样:星号表示乘法,上标表示乘方,横杠表示除法,屋顶和侧壁表示开方。这些符号中一些非常难以打出来。但是,所有这些复杂事物可以通过调用表达式的符号来统一。虽然 Python 通过中缀符号(比如` + ` 和` - ` )支持常见的数学运算符,任何运算符都可以表示为带有名字的函数。
80
80
@@ -136,9 +136,9 @@ Python 定义了大量的函数,包括上一节提到的运算符函数,但
136
136
62.83185307179586
137
137
```
138
138
139
- ` = ` 符号在 Python(以及许多其它语言)中叫做赋值运算符。赋值是 Python 中的最简单的抽象手段,因为它使我们可以使用最简单的清除来引用复合操作的结果 ,例如上面计算的` area ` 。这样,复杂的程序可以由复杂性递增的计算对象一步一步构建,
139
+ ` = ` 符号在 Python(以及许多其它语言)中叫做赋值运算符。赋值是 Python 中的最简单的抽象手段,因为它使我们可以使用最简单的名称来引用复合操作的结果 ,例如上面计算的` area ` 。这样,复杂的程序可以由复杂性递增的计算对象一步一步构建,
140
140
141
- 将名称绑定到值上的可能,以及随后通过名称来检索这些值 ,意味着解释器必须维护某种内存来跟踪这些名称和值的绑定。这些内存叫做环境。
141
+ 将名称绑定到值上,以及随后通过名称来检索这些值的可能 ,意味着解释器必须维护某种内存来跟踪这些名称和值的绑定。这些内存叫做环境。
142
142
143
143
名称也可以绑定到函数。例如,名称` max ` 绑定到了我们曾经用过的` max ` 函数上。函数不像数值,不易于渲染成文本,所以 Python 使用识别描述来代替,当我们打印函数时:
144
144
@@ -165,7 +165,7 @@ Python 定义了大量的函数,包括上一节提到的运算符函数,但
165
165
2
166
166
```
167
167
168
- 在 Python 中,通过赋值绑定的名称通常叫做变量名称,因为它们在执行程序期间可以绑定到大量不同的值上面 。
168
+ 在 Python 中,通过赋值绑定的名称通常叫做变量名称,因为它们在执行程序期间可以绑定到许多不同的值上面 。
169
169
170
170
## 1.2.5 嵌套表达式的求解
171
171
@@ -191,28 +191,28 @@ Python 定义了大量的函数,包括上一节提到的运算符函数,但
191
191
192
192
这个示例叫做表达式树。在计算机科学中,树从顶端向下生长。每一点上的对象叫做节点。这里它们是表达式和它们的值。
193
193
194
- 求出根节点,也就是整个表达式,需要首先求出枝干节点,也就是子表达式。叶子节点(也就是没有来自于它们的枝干的节点 )的表达式表示函数或数值。内部节点分为两部分:表示我们想要应用的求值规则的调用表达式,以及表达式的结果。观察这棵树中的求值,我们可以想象操作数的值向上流动,从叶子节点开始,在更高的层上融合。
194
+ 求出根节点,也就是整个表达式,需要首先求出枝干节点,也就是子表达式。叶子节点(也就是没有子节点的节点 )的表达式表示函数或数值。内部节点分为两部分:表示我们想要应用的求值规则的调用表达式,以及表达式的结果。观察这棵树中的求值,我们可以想象操作数的值向上流动,从叶子节点开始,在更高的层上融合。
195
195
196
- 接下来,观察第一步的重复应用,这会将我们带到需要求值的地方,并不是调用表达式,而是基本表达式,例如数字(比如` 2 ` ),以及名称(比如` add ` ),我们需要规定下列食物来谨慎对待基本的东西 :
196
+ 接下来,观察第一步的重复应用,这会将我们带到需要求值的地方,并不是调用表达式,而是基本表达式,例如数字(比如` 2 ` ),以及名称(比如` add ` ),我们需要规定下列事物来谨慎对待基本的东西 :
197
197
198
198
+ 数字求值为它标明的数值,
199
199
+ 名称求值为当前环境中这个名称所关联的值
200
200
201
- 要注意环境的关键作用是决定表达式中符号的含义。Python 中,谈到例如这样的一个表达式的值没有意义 :
201
+ 要注意环境的关键作用是决定表达式中符号的含义。Python 中,在不指定任何环境信息,来提供名称 ` x ` (以及名称 ` add ` )的含义的情况下,谈到这样一个表达式的值没有意义 :
202
202
203
203
``` py
204
204
>> > add(x, 1 )
205
205
```
206
206
207
- 在不指定任何环境信息,来提供名称 ` x ` (以及名称 ` add ` )的含义的情况下。 环境提供了求值所发生的上下文,它在我们理解程序执行中起到重要作用。
207
+ 环境提供了求值所发生的上下文,它在我们理解程序执行中起到重要作用。
208
208
209
- 这个求值过程并不符合所有 Python 代码的求解,仅仅是调用表达式、数字和名称。例如,它并不能处理赋值语句。执行
209
+ 这个求值过程并不符合所有 Python 代码的求解,仅仅是调用表达式、数字和名称。例如,它并不能处理赋值语句。
210
210
211
211
``` py
212
212
>> > x = 3
213
213
```
214
214
215
- 并不返回任何也不求解任何参数上的函数, 因为赋值的目的是将一个名称绑定到一个值上。通常,语句不会被求值,而是被执行,它们不产生值,但是会做出一些改变 。每种语句或表达式都有自己的求值或执行过程,我们会在涉及时逐渐介绍 。
215
+ 的执行并不返回任何值,也不求解任何参数上的函数, 因为赋值的目的是将一个名称绑定到一个值上。通常,语句不会被求值,而是被执行,它们不产生值,但是会改变一些东西 。每种语句或表达式都有自己的求值或执行过程,我们会在涉及时逐步介绍 。
216
216
217
217
218
218
注:当我们说“数字求值为数值”的时候,我们的实际意思是 Python 解释器将数字求解为数值。Python 的解释器使编程语言具有了这个意义。假设解释器是一个固定的程序,行为总是一致,我们就可以说数字(以及表达式)自己在 Python 程序的上下文中会求解为值。
0 commit comments