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

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 cls
cls()

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

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

import os
def 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错误的时候,就会自动略过。
            pass
except IOError: #在这里指定错误的类型为IOError,这样的话,当出现IOError错误的时候,就会自动打印'The data file is misssing!'
    print('The data file is misssing!')

你可能感兴趣的:(python,函数)