Skip to content

Commit 6c72b9a

Browse files
committed
class
1 parent b050101 commit 6c72b9a

File tree

2 files changed

+7
-51
lines changed

2 files changed

+7
-51
lines changed

Diff for: 203.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
>圣徒缺乏要帮补,客要一味的宽带。逼迫你们的,要给他们祝福。只要祝福,不可诅咒。与喜乐的人同乐,与哀哭的人要同哭。要彼此同心,不要志气高大,倒要俯就卑微的人。不要自以为聪明。不要以恶报恶,众人以为美的事,要留心去作。若是能行,总要尽力与众人和睦。(ROMANS 12:13-17)
22
3-
函数(3)
3+
#函数(3)
44

55
在设计函数的时候,有时候我们能够确认参数的个数,比如一个用来计算圆面积的函数,它所需要的参数就是半径(πr^2),这个函数的参数是确定的。
66

Diff for: 208.md

+6-50
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
>世人凭自己的智慧,既不认识神,神就乐意用人所当作愚拙的道理拯救那些信的人,这就是神的智慧了。犹太人是要神迹,希腊人是求智慧;我们却是传钉十字架的基督。(1 CORINTHIANS 2:21-22)
1+
>世人凭自己的智慧,既不认识神,神就乐意用人所当作愚拙的道理拯救那些信的人,这就是神的智慧了。犹太人是要神迹,希腊人是求智慧;我们却是传钉十字架的基督。(1 CORINTHIANS 1:21-22)
22
33
#类(3)
44

@@ -187,9 +187,9 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
187187

188188
##命名空间
189189

190-
命名空间,英文名字:namespaces。在研究类或者面向对象编程中,它常常被提到。
190+
命名空间,英文名字:namespaces。在研究类或者面向对象编程中,它常常被提到。虽然在[《函数(2)](./202.md)中已经对命名空间进行了解释,那时是在函数的知识范畴中对命名空间的理解。现在,我们在类的知识范畴中理解“类命名空间”——定义类时,所有位于class语句中的代码都在某个命名空间中执行,即类命名空间。
191191

192-
在研习命名空间以前,请打开在python的交互模式下,输入:import this
192+
在研习命名空间以前,请打开在python的交互模式下,输入:`import this`,可以看到:
193193

194194
>>> import this
195195
The Zen of Python, by Tim Peters
@@ -218,49 +218,7 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
218218

219219
这是为了向看官说明Namespaces、命名空间值重要性。
220220

221-
###什么是命名空间
222-
223-
从“一切皆为对象”开始说起吧。对象,很多时候我们直接使用它并不方便,因此要给它取一个名字。打个比方,有这样一个物种,它是哺乳纲灵长目人科人属智人种,这就是所谓的对象,但是,在平时提及这个对象的时候,总是要说“哺乳纲灵长目人科人属智人种”,是不是太麻烦了?于是聪明的这个物种就为这个世界上的各种对象命名,例如将“哺乳纲灵长目人科人属智人种”这个对象命名为“人”。
224-
225-
在编程中也是如此,前面在讲述变量相关知识的时候已经说明了变量和引用对象的关系。
226-
227-
>>> a = 7
228-
>>> id(7)
229-
137589400
230-
>>> id(a)
231-
137589400
232-
>>> id(7) == id(a)
233-
True
234-
235-
看这个例子。7就是一个计算机内存中存在的对象,用id()这个内置函数可以查看7在内存(在RAM)中的地址。a 就是为这个对象预备的名字,如前面所讲的,它与内存中的一个编号为137589400的对象关联,或者说引用了这个对象,这个对象就是7.
236-
237-
如果做了下面的操作:
238-
239-
>>> a = a + 1
240-
>>> id(a)
241-
137589388
242-
>>> a
243-
8
244-
>>> id(8)
245-
137589388
246-
247-
其实,上面操作中的`a + 1`完成的是a引用的对象`7+1`,只不过是顺着对象7的命名a导入了对象7罢了,这样就在内存中建立了一个新的对象8,同样通过id()函数查看到内存中的地址,通过地址可以看到,这时候的a又自动引用对象8了.
248-
249-
>>> id(7) #对象7在内存中的地址没变
250-
137589400
251-
>>> b = 7 #b引用此对象
252-
>>> id(b)
253-
137589400
254-
255-
上面a转换引用对象的过程,是自动完成的。而当b=7的时候,并不是在内存中从新建立一个对象7,而是b引用了已有的对象。这就是python的所谓动态语言的特点。
256-
257-
![](./2images/20802.png)
258-
259-
当然,可以给任何对象取名字,或者说为任何对象都可以建立一个所引用的变量。比如函数、类都可以,此处不赘述,前面已经多次用到了。
260-
261-
现在已经又一次明确了,每个名称(命名)——英文中的NAME有动词和名字两种,所以,由于中文的特点,似乎怎么说都可以,只要明白所指,因为中文是强调语境的语言——都与某个对象有对应关系。那么所谓的**命名空间,就是这些命名(名称)的集合,它们分别与相应的对象有对应关系。**
262-
263-
用一句比较学术化的语言说:
221+
把在[《函数(2)》](https://github.com/qiwsir/StarterLearningPython/blob/master/202.md)中已经阐述的命名空间用一句比较学术化的语言概括:
264222

265223
**命名空间是从所定义的命名到对象的映射集合。**
266224

@@ -278,8 +236,6 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
278236

279237
那么程序在查询上述三种命名空间的时候,就按照从里到外的顺序,即:Local Namespaces --> Global Namesspaces --> Built-in Namesspaces
280238

281-
还要补充说一下,既然命名空间中存在着命名和对象的映射,不知道看官看到这句话能想到什么?启发一下,回忆以往学过的那种类型数据也存在映射关系呢?字典,就是那个dictionary,是“键值”对应的,例如:{"name":"qiwsir","lang":"python"}
282-
283239
>>> def foo(num,str):
284240
... name = "qiwsir"
285241
... print locals()
@@ -288,11 +244,11 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
288244
{'num': 221, 'name': 'qiwsir', 'str': 'qiwsir.github.io'}
289245
>>>
290246

291-
这是一个访问本地命名空间的方法,用print locals() 完成,从这个结果中不难看出,所谓的命名空间中的数据存储结构和dictionary是一样的。
247+
这是一个访问本地命名空间的方法,`print locals()` 完成,从这个结果中不难看出,所谓的命名空间中的数据存储结构和dictionary是一样的。
292248

293249
根据习惯,看官估计已经猜测到了,如果访问全局命名空间,可以使用 `print globals()`
294250

295-
###作用域
251+
##作用域
296252

297253
作用域是指 Python 程序可以直接访问到的命名空间。“直接访问”在这里意味着访问命名空间中的命名时无需加入附加的修饰符。(这句话是从网上抄来的)
298254

0 commit comments

Comments
 (0)