本博客内容大多来自Eric Matthes的《Python编程 从入门到实践》袁国忠译本,感谢原作者以及译者的辛苦劳作,这是非常好的一本python入门书籍。
内容
字符串
1:单引号与双引号都可以表示字符串,因此可以在字符串内出现引号。
2:title()函数可以将首写字母变成大写,如将name = bob通过name.title()变为Bob。
3:upper()与lower()函数转换大小写,用法与上一样。
4:合并使用+
5:添加空白使用\t \n \n\t 等。
6:删除空白:strip() lstrip() rstrip(),此操作是临时操作,如果想永久删除需要写入原来变量。如name = name.rstrip()。
7:变量名慎用l与大写字母O,有可能被看作1和0。尽量使用小写的变量名。
数字
1:+-*/ 乘方:**
2:数字转化为字符串:str(number)
3:python2中整数除法不能除尽时直接删除小数部分,而不是四舍五入,例如3/2=1。为了避免这种情况可以使用3.0/2或者3/2.0以及3.0/2.0,结果都为1.5。python3中则是3/2=1.5
注释
1:#注释掉该行
2:多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来如
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
列表
1:[]表示列表,索引从0开始。访问最后一个元素下标为-1。
2:修改某元素指定索引与对应的新值即可。
3:添加元素:列尾append(新元素) 中间插入用insert(下标,元素值),该位置原有元素向右移。
4:删除元素:del +列表名[元素索引]。
5:删除元素:pop() 刪除列表末尾的元素。或者pop(下标)。pop是临时操作,二del是永久删除。
6:删除元素:知道元素具体的值,可以使用remove(元素值),此方法只删除第一个(如果包含多个)。
7:排序:sort()和sort(reverse=True)对列表进行永久性排序。sorted(列表名)进行临时性排序,同时也可以传递参数reverse=True进行反向排序。reverse()将列表反转,永久性改变。
8:len(列表名):获取列表长度。
9:不能对空列表提取最后一个元素。
列表操作
1:遍历列表使用循环
2:range()函数生成一些列数字,需要注意的是range()到达指定的第二个值后停止。如
for value in range(1,5)
print(value)
得到结果是1,2,3,4
range(2,5,2)得到的是2,4。其中2表示步长。
3:可以利用list()将range()结果转换为列表。如numbers = list(range(1,3))。
4:对于数字列表可以使用min(列表名)、max和sum进行一些简单的统计操作。
5:列表解析,可以将for循环和创建新元素的代码合为一行。如:
squares = [value**2 for value in range(1,4)]
print(squares)
得到的结果为[1,4,9,16]
6:切片:处理列表中部分元素。列表名[下标:下标],注意列表的开始下标为0。[:下标]表示从头开始提取,同理[下标:]表示终止于末尾。[-3:]提取最后三个元素。这里可以看出负数在列表中表示距离末尾相应距离的元素,可以参考-1表示最后一个元素。
7:复制列表可以使用[:],这里的语法与MATLAB有些相似。但是不能直接利用list_new = list_old 的方式进行复制,这样list_new将指向list_old对应的内容,对其做的操作相当于对old进行操作,只能使用list_new = list_old[:]。这里跟指针的思想很相似。
元组
1:元组用(a,b,...)定义,与列表相比,元组一经定义就不可以更改,只能访问。
2:my_tuple = (1,2),如果使用my_tuple[0] = 3这个操作是错误的,只能重新定义元组,如my_tuple = (2,4),这时my_tuple就是一个新的元组了。
if
1:判断是否包含在列表使用 in 和not in。
2:注意if后面语句结束要有冒号:。
3:else if在Python中的形式为if-elif-else。
4:有时可以使用elif代替else这样使代码更为清晰。
字典
1:表示方法:字典名= {键:值, 键:值...},调用方法为 字典名[键]。键名一般用引号''括起来,这也比较好理解,不加引号则显示无定义,用""也可以,有意思的是打印出来仍为''。
空字典:{}
2:添加键-值对:直接定义键名然后调用对其赋值,字典名[新键]=新值。
3:修改:字典可以通过调用直接赋值修改。
4:删除:del 字典名[键],相应的键-值对被删除。
5:由类似对象组成的字典,对于较长的字典可以这样定义
favorite_languages = {
'Alice':'Python',
'Bob':'C',
'Candy':'ruby',
}
6:遍历字典:.items()
遍历所有键-值对,其中key, value可以是任何变量名,如常用的k, v
favorite_languages = {
'Alice':'Python',
'Bob':'C',
'Candy':'ruby',
}
for key,value in favorite_languages.items():
print(key)
遍历所有键:.keys(),下面两个等价。实际上.keys()返回的是一个列表,可以对其进行其他操作,如查询等。
for key in favorite_languages.keys():
for key in favorite_languages:
7:按照顺序遍历所有的键,前面的遍历方法获取顺序不可测,测试发现一般跟定义时顺序一样。因为字典关心的是键与值的对应关系,如果想按照一定的顺序遍历字典,可以使用sorted().
for key in sorted(favorite_languages.keys()):
8:遍历所有的值:.values()。 当含有重复相同的值时,可以通过set()来获取独一无二的值
for value in set(favorite_languages.values()):
9:嵌套:可以在列表中嵌套字典,字典中嵌套列表或者字典中嵌套字典。
字典列表:如班级名单,每个同学又有各自属性。
字典中嵌套列表
字典中嵌套字典:如用户的名单,每个用户包括他的姓氏,名字,住址等。
输入
1:input()输入 括号内是用户提示信息。 输入的是字符串,可以用int()转换得到数字。
While循环
1:可以使用break、continue
2:删除特定值的所有列表元素,while ' ' in ' ' :
函数
1:形参与实参
2:位置实参、关键字实参默认值
3:返回值 return
4:可以传递列表,如果不想改变列表,则需传递副本即 列表名[:]
5:传递任意实数实参: *参数名 生成的是一个元组 **参数名 生成一个字典。
6:模块:即.py文件,可以使用import调用。 使用调用模块函数时需要: 模块名.函数名
调用特定函数: from file_name import function_name1,function_name2,这时使用函数不再需要声明模块名。
还可以使用as 给函数制定别名, from file_name import function_name as function_new_name
同样还可以使用as给别的模块指定别名,import module_name as new_name
导入所有函数: from module_name inport *
7: 一些注意事项
形参制定默认值时等号两边不要留空号,同样调用时也不要留空号。
函数注释应该紧跟定义之后。
类
Python中一般首写字母大写的为类。
1:创建和使用: class 类名(): 相关函数如 _init_(self, 属性名...): 访问直接用 . 可以访问属性和函数。
2:python2.7创建类是,需要在括号类包括object,即class ClassName(object):
3:可以给属性指定默认值。
4:改变属性值:可以直接调用属性并赋予新的值,也可以通过定义函数去改变。
5:继承:class 子类名(父类名) 调用父类使用super(),因为父类也称为超类。
Python2.7 使用super()时需要两个实参,即super(父类名, self)。
6:重写父类: 重写某些函数时直接定义一个同名的函数,然后进行相应的修改。
7:导入类
导入单个类或者多个类:from file_name import class_name(, class_name2....)
导入模块或者所有类的方法跟上面一样,import module_name或则 from module_name import *。但是不建议使用*号导入,因为对于阅读代码没有帮助且容易出错。
模块类导入模块的方式一样。
8:Python 标准库如:
from collections import OrderedDict OrderedDict这个类能够记录添加键-值对的顺序,使用方法为OrderedDict()。
from random inport randint 可以生成随机整数。
9:类编码风格:类名应该使用驼峰命名法,即类名中的每个单词的首写字母应该大写,不适用下划线。实例名和模块名都应该小写,单词之间加上下划线。
使用空行来组织代码,不要滥用,比如类之间可以用两个空行,类中不同的方法可以使用一个空行。
先导入标注库模块,空行,再导入自己编写的模块
文件
1:读取文件:open('文件名',模式),一般不需刻意使用close()去关闭文件,Python在适当时候会将其关闭。
打开模式: 默认是只读模式, 'w':写入文件,如果文件不存在将创建文件,如果存在则在返回文件对象前清空该文件。
'w+':可以读写,不存在则创建,会将文件清零。
'r':读取模式,不创建文件。
'a':附加模式,不可读。给文件添加内容,写入的内容将添加到文件末尾,若文件不存在则创建文件。
’a+':附加读写,可以创建文件。
'r+':读取和写入,不创建文件。
读取使用read()
with在不需要访问文件后将其关闭。这里文件名也可以是文件路径+文件名,路径使用反斜杠\ 。
with open('filename') as file_object
contents = file_object.read()
print(contents)
2:逐行读取
with open('filename') as file_object:
for line in file_object:
print(line)
with open('filename') as file_object:
lines = file_object.readlines()
for line in lines:
print(line)
3:写入文件
with open('filename','w') as file_object
file_object.write("I love programming.")
4:存储数据
先import json
json.dump() 接受两个实参,要存储的数据以及可以存储数据的文件对象。
json.load() 可以读取json文件。
import json
numbers = [1,3,4,5,6,9]
filename = 'numbers.json'
with open(filename,'w') as f_obj1:
json.dump(numbers,f_obj1)
with open(filename) as f_obj2:
number_read = json.load(f_obj2)
print(number_read)
异常
1:try-except模块
try:
print(3/0)
except ZeroDivisionError:
print("You can't diveide by zero")
try:
answer = int(num1)/int(num2)
except ZeroDivisionError:
print("You can't diveide by zero")
else:
print(answer)
2:FileNotFoundError
3:分析文本 .split()可以得到所有单词的列表。
4:不处理使用 pass,如在except那里使用pass,则不对错误做出任何事情。
代码重构
1:将代码划分为一系列完成具体工作的函数,使代码更加清晰、易于理解并容易扩展。
测试代码
1:使用一些判断语句避免错误发生。
2:单元测试:核实函数在各方面没问题 测试用例是一组单元测试 全覆盖式测试 用例包含一整套单元测试,一般等项目投入使用再广泛测试。
import unittest
其中unittest.Testcase