Head First Python 学习札记 2016-04-07

来源:互联网 发布:淘宝dota2 编辑:程序博客网 时间:2024/06/05 06:39

Python术语:

3、在IDLE编辑器中按F5可以将模块的代码“加载”到IDLE shell,模块名会专门导入到IDLE的命名空间,在使用IDLE时这很重要,在代码中也要显式的使用import语句。
4、包含end=”作为print() BIF的一个而参数会关闭其默认行为(即在输入中自动包含换行)
5、IDLE提供了Help->Python Docs菜单选项(这会在你的Web浏览器中打开整个文档),可以利用这个菜单搜索整个Python文档,如果你只想看某个方法或函数有关的文档,可以在DILE shell中使用help() BIF
6、在Python中包含两个列表,一种叫做可变列表用中括号包围[],例如[names],一种叫做不可变列表,又叫做元祖,被小括号包围,例如:(names),可以认为元祖是一个常量列表。
7、Exception:因运行时错误而出现,会产生一个traceback。
8、traceback:是对出现的错误所进行的一个详细的描述。
9、第三章新方法整理:
open()方法:打开一个磁盘文件,创建迭代器从文件中读取数据,一次一行。
readline()方法:从打开的文件中读取一行数据
seek()方法:将文件退回到起始的位置
split()方法:将一个字符串分成一个子字符串列表
close()方法:关闭之前打开的一个文件
find()方法:会在一个字符串中查找一个特定的子串
not关键字:取反
try/except语句提供一个异常处理截止,从而保护可能导致运行时错误的某些代码行。
pass语句:就是Python中的空语句或者null语句,它什么也不做。

13、使用range()来控制迭代指定的次数

for num in range(4):    print(num)

14、向PyPi上传代码

1、在http://pypi.python.org/中创建一个账号
2、在本地的Dos窗口中输入:C:\Users\Tony\AppData\Local\Programs\Python\Python35-32\python.exe setup.py register #登录刚刚注册的账号
C:\Users\Tony\AppData\Local\Programs\Python\Python35-32\python.exe setup.py sdist upload

15、每次迭代了Python模块的版本之后,都要重新的生成模块一次,这样才能正常使用,也就是在模块文件夹里打开Dos窗开,执行下面两条命令:

C:\Users\Tony\AppData\Local\Programs\Python\Python35-32\python.exe setup.py sdist
C:\Users\Tony\AppData\Local\Programs\Python\Python35-32\python.exe setup.py install
通过为参数设置缺省值(level=0),可以来实现版本的兼容:

1.0.0版本:def print_lol(the_list):    for item in the_list:        if isinstance(item, list):            print_lol(item)        else:            print(item)
1.1.0版本:def  print_lol(the_list, level=0): #level=0就是缺省值    for each_item in the_list:        if isinstance(each_item, list):            print_lol(each_item, level+1)        else:            for tab_stop in range(level):                print("\t",end='')            print(each_item)

这样的话就算升级了模块,覆盖之前模块中的只有一个参数的函数,之前在其他Python程序中的对print_lol引用,也不会受到影响。

'''1.0.0和1.1.0两个版本都可以共存了'''nester.print_lol(movies,0)nester.print_lol(movies)nester.print_lol(movies,2)'''如果发现新迭代的版本不能用,直接Copy迭代的源码,然后生成新的Modual即可。'''

16、如何在打开Python.exe的时候就完成某些模块的预加载?

以预加载清屏函数为例:

1、在任意位置新建startup.py的路径
内容:

from my import clscls()'''要导入其他文件的时候,也可以用from moduleName import functionNamefunctionName()的形式来预调用函数'''

2、在相同文件夹里面创建my.py文件
内容:

import osdef cls():    os.system("cls");

3、在电脑的环境变量中加一个名为PYTHONSTARTUP的环境变量:属性就是startup.py的路径:E:\Python_WrokSpace\package\startup.py
使用Python解释器的时候,我们可能需要在每次解释器启动时执行一些命令。你可以在一个文件中包含你想要执行的命令,设定一个名为PYTHONSTARTUP 的环境变量来指定这个文件

完成这些之后,再启动Python就能够自动加载一些预置函数的内容了。

17、利用Python进行文件的读取

1、在Python.exe文件的外层文件夹里创建文件夹/HeadFirstPython/chapter3,然后在chapter3里面创建sketch.txt文件,在sketch.txt文件中有几行文本内容。

如下:Man: Is this the right room for an argument?Other Man: I've told you once.Man: No you haven't!Other Man: Yes I have.Man: When?Other Man: Just now.Man: No you didn't!Other Man: Yes I did!Man: You didn't!Other Man: I'm telling you, I did!Man: You did not!Other Man: Oh I'm sorry, is this a five minute argument, or the full half hour?Man: Ah! (taking out his wallet and paying) Just the five minutes.Other Man: Just the five minutes. Thank you.Other Man: Anyway, I did.Man: You most certainly did not!Other Man: Now let's get one thing quite clear: I most definitely told you!Man: Oh no you didn't!Other Man: Oh yes I did!Man: Oh no you didn't!Other Man: Oh yes I did!Man: Oh look, this isn't an argument!(pause)Other Man: Yes it is!Man: No it isn't!(pause)Man: It's just contradiction!Other Man: No it isn't!Man: It IS!Other Man: It is NOT!Man: You just contradicted me!Other Man: No I didn't!Man: You DID!Other Man: No no no!Man: You did just then!Other Man: Nonsense!Man: (exasperated) Oh, this is futile!!(pause)Other Man: No it isn't!Man: Yes it is!

2、在Python解释器里面输入:

import os #查看当前的工作空间os.chdir('../HeadFirstPython/chapter3') #将工作空间转移到chapter3里os.getcwd()data = open('sketch.txt') #打开文本print(data.readLine(), end='')data.seek(0)#使用seek方法回到文件的第一行,当然,对于Python文件,也可以使用tell方法for each_line in data:    print(each_line, end='') #使用for循环来打印sketch.txt中的文本数据data.close() #最后,文本处理完了,记得将它关闭

18、使用内置函数BIF处理数据

1、split()方法返回一个字符串列表,这会赋值给一个目标标识列表。这称为多重赋值(multiple assignment)

for each_line in data:# each_line中:前面的部分赋值给了role,后面的部分赋值给了line_spoken    (role, line_spoken) = each_line.split(':')    print(role, end='')    print(' said:', end='')    print(line_spoken, end='')

在IDLE中输入:Help(each_line.split)可以查看split的帮助文档
由S.split([sep[, maxsplit]])可知,在split函数中,有一个可选选项。名为maxsplit,当maxsplit=1的时候会把each_line分成两部分,同理当maxslipt=3的时候会把each_line分成四份。

#将上面的代码改成如下所示:for each_line in data:    (role, line_spoken) = each_line.split(':', 1)    print(role, end='')    print(' said:', end='')    print(line_spoken, end='')#这样的话,无论一行数据里面有几个:都是处理成两部分的
#对代码进行更进一步的改进,可以在一行each_line中没有:的时候不报错,而正常运行for each_line in data:    #注意if取反的方式是加一个关键字:not,还有就是,别忘记了在if后面加:    if not each_line.find(':') == -1:        (role, line_spoken) = each_line.split(':', 1)        print(role, end='')        print(' said:', end='')        print(line_spoken, end='')
#通过异常捕获机制来完成代码改进,在某一行数据没有:的时候依旧可以不报错,而正常运行。for each_line in data:    if not each_line.find(':') == -1:        try:            (role, line_spoken) = each_line.split(':', 1)            print(role, end='')            print(' said:', end='')            print(line_spoken, end='')        except:            pass #当捕获异常的时,比如整行each_line中都没有:的时候就出发except的内容,将错误pass掉,在继续执行接下来的操作。

将异常处理代码设计为处理一种特定类型的错误,一定要在except代码上指定错误类型。这样一来,就可以把一般化的异常处理代码转变为具有特性的异常处理代码。

try:    data = open('sketch.txt')    for each_line in data:        try:            (role, line_spoken) = each_line.split(':', 1)            print(role, end='')            print(' said:', end='')            print(line_spoken, end='')        except ValueError:#在这里指定错误的类型为ValueError,这样的话,当出现ValueError错误的时候,就会自动略过。            passexcept IOError: #在这里指定错误的类型为IOError,这样的话,当出现IOError错误的时候,就会自动打印'The data file is misssing!'    print('The data file is misssing!')
0 0
原创粉丝点击