Skip to content

Commit 6df7332

Browse files
committed
p3
1 parent 5108821 commit 6df7332

File tree

4 files changed

+50
-35
lines changed

4 files changed

+50
-35
lines changed

126.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757

5858
>>> f = open('130.txt')
5959
>>> for line in f:
60-
... print line, #Python 3: print(line, end=',')
60+
... print line, #Python 3: print(line, end='')
6161
...
6262
learn python
6363
http://qiwsir.github.io

221.md

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@
22
33
#标准库(2)
44

5-
python标准库内容非常多,有人专门为此写过一本书。在本教程中,由于我的原因,不会将标准库进行完整的详细介绍,但是,我根据自己的理解和喜好,选几个呈现出来,一来显示标准库之强大功能,二来演示如何理解和使用标准库。
5+
python标准库内容非常多,有人专门为此写过一本书。在本教程中,我将根据自己的理解和喜好,选几个呈现出来,一来显示标准库之强大功能,二来演示如何理解和使用标准库。
66

77
##sys
88

9-
这是一个跟python解释器关系密切的标准库,上一节中我们使用过`sys.path.append()`
9+
这是一个跟Python解释器关系密切的标准库,前面已经使用过`sys.path.append()`
1010

1111
>>> import sys
1212
>>> print sys.__doc__
1313

14-
显示了sys的基本文档,看第一句话,概括了本模块的基本特点
14+
显示了`sys`的基本文档,第一句话概括了本模块的基本特点
1515

1616
This module provides access to some objects used or maintained by the
1717
interpreter and to functions that interact strongly with the interpreter.
1818

19-
在诸多sys函数和变量中,选择常用的(应该说是我觉得常用的)来说明。
19+
在诸多`sys`函数和属性中,选择常用的(应该说是我觉得常用的)来说明。
2020

2121
###sys.argv
2222

23-
sys.argv是变量,专门用来向python解释器传递参数,所以名曰“命令行参数”。
23+
sys.argv是专门用来向python解释器传递参数,名曰“命令行参数”。
2424

2525
先解释什么是命令行参数。
2626

@@ -48,18 +48,18 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
4848

4949
只选择了部分内容摆在这里。所看到的如`-B, -h`之流,都是参数,比如`python -h`,其功能同上。那么`-h`也是命令行参数。
5050

51-
`sys.arg`在python中的作用就是这样。通过它可以向解释器传递命令行参数。比如:
51+
`sys.arg`在Python中的作用就是这样。通过它可以向解释器传递命令行参数。比如:
5252

5353
#!/usr/bin/env python
5454
# coding=utf-8
5555

5656
import sys
5757

58-
print "The file name: ", sys.argv[0]
58+
print "The file name: ", sys.argv[0] #Python 3的读者,请自行修改为print()函数形式,下同,从略
5959
print "The number of argument", len(sys.argv)
6060
print "The argument is: ", str(sys.argv)
6161

62-
将上述代码保存,文件名是22101.py(这名称取的,多么数字化)。然后如此做:
62+
将上述代码保存,文件名是22101.py。然后如此做:
6363

6464
$ python 22101.py
6565
The file name: 22101.py
@@ -71,18 +71,18 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
7171
-`$ python 22101.py`中,“22101.py”是要运行的文件名,同时也是命令行参数,是前面的`python`这个指令的参数。其地位与`python -h`中的参数`-h`是等同的。
7272
- sys.argv[0]是第一个参数,就是上面提到的`22101.py`,即文件名。
7373

74-
如果我们这样来试试,看看结果
74+
如果这样来试试
7575

7676
$ python 22101.py beginner master www.itdiffer.com
7777
The file name: 22101.py
7878
The number of argument 4
7979
The argument is: ['22101.py', 'beginner', 'master', 'www.itdiffer.com']
8080

81-
如果在这里,用`sys.arg[1]`得到的就是`beginner`,依次类推。
81+
在这里用`sys.arg[1]`得到的就是`beginner`,依次类推。
8282

8383
###sys.exit()
8484

85-
这是一个方法,意思是退出当前的程序
85+
这个方法的意思是退出当前程序
8686

8787
Help on built-in function exit in module sys:
8888

@@ -95,7 +95,7 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
9595
If it is another kind of object, it will be printed and the system
9696
exit status will be one (i.e., failure).
9797

98-
从文档信息中可知,如果用`sys.exit()`退出程序,会返回SystemExit异常。这里先告知读者,还有另外一退出方式,是`os._exit()`,这两个有所区别。后者会在后面介绍
98+
从文档信息中可知,如果用`sys.exit()`退出程序,会返回`SystemExit`异常。这里先告知读者,还有另外一退出方式,是`os._exit()`,这两个有所区别。
9999

100100
#!/usr/bin/env python
101101
# coding=utf-8
@@ -106,7 +106,7 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
106106
if i == 5:
107107
sys.exit()
108108
else:
109-
print i
109+
print i #Python 3: print(i)
110110

111111
这段程序的运行结果就是:
112112

@@ -117,36 +117,40 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
117117
3
118118
4
119119

120-
需要提醒读者注意的是,在函数中,用到return,这个的含义是终止当前的函数,并返回相应值(如果有,如果没有就是None)。但是sys.exit()的含义是退出当前程序,并发起SystemExit异常。这就是两者的区别了。
120+
在大多数函数中会用到return,其含义是终止当前的函数,并向调用函数的位置返回相应值(如果没有就是None)。但是`sys.exit()`的含义是退出当前程序——不仅仅是函数,并发起`SystemExit`异常。这就是两者的区别了。
121121

122-
如果使用`sys.exit(0)`表示正常退出。如果读者要测试,需要在某个地方退出的时候有一个有意义的提示,可以用`sys.exit("I wet out at here.")`,那么字符串信息就被打印出来。
122+
如果使用`sys.exit(0)`表示正常退出。若需要在退出的时候有一个对人友好的提示,可以用`sys.exit("I wet out at here.")`,那么字符串信息就被打印出来。
123123

124124
###sys.path
125125

126-
`sys.path`已经不陌生了,前面用过。它可以查找模块所在的目录,以列表的形式显示出来。如果用`append()`方法,就能够向这个列表增加新的模块目录。如前所演示。不在赘述。不理解的读者可以往前复习
126+
`sys.path`已经不陌生了,它可以查找模块所在的目录,以列表的形式显示出来。如果用`append()`方法,就能够向这个列表增加新的模块目录。如前所演示。不在赘述。
127127

128-
###sys.stdin, sys.stdout, sys.stderr
128+
###sys.stdout
129129

130-
这三个放到一起,因为他们的变量都是类文件流对象,分别表示标准UNIX概念中的标准输入、标准输出和标准错误。与python功能对照,sys.stdin获得输入(用raw_input()输入的通过它获得,python3.x中是imput()),sys.stdout负责输出了。
130+
`sys.stdin``sys.stdout``sys.stderr`这三个有相似之处,它们所实现的都是类文件流,分别表示标准UNIX概念中的标准输入、标准输出和标准错误。
131+
132+
与Python中的函数功能对照,`sys.stdin`获得输入(等价于Python 2中的raw_input(),Python 3中的input()),`sys.stdout`负责输出。
131133

132134
>流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。程序在任何时候都可以使用它们。一般来讲,stdin(输入)并不一定来自键盘,stdout(输出)也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。
133135
134-
还记得`print()`吧,在这个学习过程中,用的很多。它的本质就是`sys.stdout.write(object + '\n')`
136+
此处仅就`sys.stdout`做一个简要说明
135137

136138
>>> for i in range(3):
137-
... print i
139+
... print i #Python 3: print(i)
138140
...
139141
0
140142
1
141143
2
142144

145+
`print`语句或者函数,你一定很熟悉,此前用的很多。并且,特别说明,在默认情况下,不管是语句还是函数,最后都是有`\n`换行的。这种输入,本质上是用`sys.stdout.write(object + '\n')`实现。
146+
143147
>>> import sys
144148
>>> for i in range(3):
145149
... sys.stdout.write(str(i))
146150
...
147151
012>>>
148152

149-
造成上面输出结果在表象上如此差异,原因就是那个`'\n'`的有无
153+
跟前面的不同,是因为没有加上那个`\n`
150154

151155
>>> for i in range(3):
152156
... sys.stdout.write(str(i) + '\n')
@@ -155,42 +159,40 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
155159
1
156160
2
157161

158-
从这看出,两者是完全等效的。如果仅仅止于此,意义不大。关键是通过sys.stdout能够做到将输出内容从“控制台”转到“文件”,称之为重定向。这样也许控制台看不到(很多时候这个不重要),但是文件中已经有了输出内容。比如:
162+
从这看出,两者是完全等效的。如果仅仅止于此,意义不大。关键是通过`sys.stdout`能够做到将输出内容从“控制台”转到“文件”,称之为重定向。这样也许控制台看不到(很多时候这个不重要),但是文件中已经有了输出内容。比如:
159163

160164
>>> f = open("stdout.md", "w")
161165
>>> sys.stdout = f
162-
>>> print "Learn Python: From Beginner to Master"
166+
>>> print "Learn Python: From Beginner to Master" #Python 3: print("Learn Python: From Beginner to Master")
163167
>>> f.close()
164168

165-
`sys.stdout = f`之后,就意味着将输出目的地转到了打开(建立)的文件中,如果使用print(),即将内容输出到这个文件中,在控制台并无显现。
169+
`sys.stdout = f`之后,就意味着将输出目的地转到了打开(建立)的文件中,如果使用`print`,即将内容输出到这个文件中,在控制台并无显现。
166170

167171
打开文件看看便知:
168172

169173
$ cat stdout.md
170174
Learn Python: From Beginner to Master
171175

172-
这是标准输出。另外两个,输入和错误,也类似。读者可以自行测试。
173-
174-
关于对文件的操作,虽然前面这这里都涉及到一些。但是,远远不足,后面我会专门讲授对某些特殊但常用的文件读写操作。
175-
176+
以上,对标准库中的`sys`有了粗浅的了解。更详细内容,请读者运用本书已经反复使用的`dir()``help()`去探究,当然还有Google。
177+
176178
##copy
177179

178-
[《字典(2)》](./117.md)中曾经对copy做了讲授,这里再次提出,即是复习,又是凑数,以显得我考虑到了这个常用模块,还有:
180+
前面对浅拷贝和深拷贝做了研究,这里再次提出,温故知新。
179181

180182
>>> import copy
181183
>>> copy.__all__
182184
['Error', 'copy', 'deepcopy']
183185

184186
这个模块中常用的就是copy和deepcopy。
185187

186-
为了具体说明,看这样一个例子
188+
为了具体说明,看这样一个例子,这个例子跟以前讨论浅拷贝和深拷贝略有不同,请读者认真推敲结果,并对照代码。
187189

188190
#!/usr/bin/env python
189191
# coding=utf-8
190192

191193
import copy
192194

193-
class MyCopy(object):
195+
class MyCopy(object): #Python 3: class MyCopy:
194196
def __init__(self, value):
195197
self.value = value
196198

@@ -208,7 +210,9 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
208210
a.append("abc")
209211
foo.value = 17
210212

211-
print "original: %r\n slice: %r\n list(): %r\n copy(): %r\n deepcopy(): %r\n" % (a,b,c,d,e)
213+
print "original: {0}\n slice: {1}\n list(): {2}\n copy(): {3}\n deepcopy(): {4}\n".forrmat(a,b,c,d,e)
214+
#Python 3:
215+
#print("original: {0}\n slice: {1}\n list(): {2}\n copy(): {3}\n deepcopy(): {4}\n".format(a,b,c,d,e))
212216

213217
保存并运行:
214218

@@ -219,7 +223,7 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“
219223
copy(): ['foo', 17]
220224
deepcopy(): ['foo', 7]
221225

222-
读者可以对照结果和程序,就能理解各种拷贝的实现方法和含义了
226+
尽在不言中,请读者认真对邵上面的显示结果,体会深拷贝和浅拷贝
223227

224228
------
225229

2code/22102p3.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env python
2+
# coding=utf-8
3+
4+
import sys
5+
6+
#sys.exit("hello")
7+
for i in range(10):
8+
if i == 5:
9+
sys.exit()
10+
else:
11+
print(i)

2code/22103.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ def __repr__(self):
2121
a.append("abc")
2222
foo.value = 17
2323

24-
print "original: %r\n slice: %r\n list(): %r\n copy(): %r\n deepcopy(): %r\n" % (a,b,c,d,e)
24+
print("original: {0}\n slice: {1}\n list(): {2}\n copy(): {3}\n deepcopy(): {4}\n".format(a,b,c,d,e))

0 commit comments

Comments
 (0)