第一章笔记
"BIF"内置函数
"组(suit)"Python代码块,会通过缩进来指示分组
"功能齐全(Batteries included)"这是指Python提供了快速高效地完成工作所需的大多数功能
- 从命令行或者IDLE中运行Python3
- 标识符是指数据对象的名字。标识符没有“类型”,不过标识符所指示的数据对象有类型
- print() BIF会在屏幕上显示一个消息
- 列表是一个数据集合,数据项之间用逗号分隔,整个列表用中括号包围
- 列表就像打了“激素”的数组
- 可以用BIF处理列表,另外列表还支持一组列表方法
- 列表可以存放任意数据,而且数据可以是混合类型,列表还可以包含其他列表
- 列表可以随意伸缩,数据使用的所有内存都由Python为你管理
- Python使用缩进将语句归组在一起
- len() BIF会提供某个数据对象的长度,或者统计一个集合中的项数,如列表中的项数
- for循环允许迭代处理一个列表,这通常比使用一个等价的while循环更方便
- 可以利用if...else...语句在代码中完成判定
- isinstance() BIF会检查一个标识符是否指示某个指定类型的数据对象
- 使用def来定义一个定制函数
第二章笔记
发布到PyPi
- 首先新建一个文件夹保存模块
- 在新文件夹中创建一个名为“setup.py”的文件,setup文件包含发布的元数据
from distutils.core import setup
setup(
name='nester_lian',
version='1.0.0',
py_modules=['nester_lian'],
author='******',
author_email='********@163.com',
url='http://*******.com',
description='A simple printer of nested lists',
)
- 构建一个发布文件,在windows系统下,打开管理员命令行进入新建的文件夹目录下,键入命令:D:\Python35\python.exe setup.py sdist
- 将发布安装到Python 本地副本中,同样在上一步中的命令行窗口中键入:D:\Python35\python.exe setup.py install
- 使用模块的时候记得命名空间的关系,看如何导入的,决定如何使用模块中的方法或变量
- 上传到Pypi网站,与大家共享代码,首先注册一个账号,然后在本地命令行窗口中再次确认注册的账号,每台电脑安装python后主需要注册本地注册账号一次,使用命令:D:\Python35\python.exe setup.py register
- 注册后即可上传,同样在命令行键入:D:\Python35\python.exe setup.py upload
- Python会在一组特定位置寻找模块,查看搜索位置的方式,在控制台键入:
import sys;
sys.path
使用三重引号字符串可以在代码中加入一个多行注释
Python内存中的名字就存放在“命名空间中”
Python的主命名空间名为__main__
- 模块是一个包含Python代码的文本文件
- 发布工具允许将模块转化为可共享的包
- setup.py程序提供了模块的元数据,用来构建、安装和上传打包的发布
- 使用import语句可以将模块导入到其他程序中
- Python的各个模块提供了自己的各个命名空间,使用module.function()形式调用模块的函数时,要用命名空间名限定函数
- 使用import语句的from module import function形式可以从一个模块将函数专门导入到当前的命名空间
- 使用#可以注释掉一行代码,或者为程序增加一个简短的单行注释
- 内置函数(built-in functions,BIF)有自己的命名空间,名为__builtins__,这会自动包含在每一个Python程序中
- range()BIF可以与for结合使用,从而迭代固定次数
- 包含end=''作为print() BIF的一个参数会关闭其默认行为(即在输入中自动包含换行)
- 如果函数参数提供一个缺省值,这个函数参数就是可选的
第三章笔记
文件处理方法,文件打开,文件关闭
#打开文件,赋值给一个文件对象,代表着打开的文件
try:
the_file=open('file.txt')
#文件处理代码
#文件处理代码
except ***Error:
print("*****")
finally:
the_file.close()
“异常”(exception)因运行时错误而出现,会产生一个traceback
"traceback"是出现的运行时错误的一个详细描述
- 使用open() BIF打开一个磁盘文件,创建一个迭代器从文件读取数据,一次读取一个数据行
- readline()方法从一个打开的文件读取一行数据
- seek()方法可以用来将文件“退回”到起始位置
- close()方法关闭一个之前打开的文件
- split()方法可以将之前的一个字符串分解为一个子串列表
- Python中不可改变的常量列表称为元组(tuple)。一旦将列表数据赋至一个元祖列表,就不能再改变。元祖是不可改变的
- 数据不符合期望的格式时会出现ValueError
- 数据无法正常访问时会出现IOError(例如,可能你的文件被移走或者重命名)
- help()BIF允许你在IDLE shell中访问Python的文档
- find()方法会在一个字符串中查找一个特定子串
- not关键字将一个调节取反
- try/except语句提供了一个异常处理机制,从而保护可能导致运行时错误的某些代码行
- pass语句就是Python的空语句或null语句,它什么也不做
第四章笔记
文件的读写,open()方法可以有多个模式,默认是r模式即读模式,如果要写文件,可以用参数提供"w",如果这个文件存在,则会清空它现有的内容,也就是完全清除然后再写入,如果需要追加到一个文件需要使用访问模式a。如果要打开一个进行读写,不清除则使用w+模式。
try:
data=open('its.txt',"w")
data2=open('data2.txt',"w")
print("It's ...",file=data)
except IOError as err:
print('File error: '+str(err))
finally:
if 'data' in locals():
data.close()
等同于使用with代码
try:
with open('its.txt',"w") as data,open("data2.txt","w") as data2:
print("It's ...",file=data)
except IOError as err:
print('File error: '+str(err))
Python术语
“不可变类型”——Python中的一些数据类型一旦赋值,这个值就不能再改变
“腌制”——将数据对象保存到一个持久存储中的过程
“解除腌制”——从持久存储中恢复一个已保存的数据对象的过程
- strip()方法可以从字符串中去除不想要的空白符
- print() BIF的file参数控制将数据发送/保存到哪里
- finally组总会执行,而不管try/except语句中出现什么异常
- 会向ecxept组传入一个异常对象,并使用as关键字赋至一个标识符
- str()BIF可以用来访问任何数据对象(支持串转换)的串表示
- in操作符用于检查成员关系
- "+"操作符用于字符串时将连接两个字符串,用于数字时则会将两个数相加
- with语句会自动处理所有已打开文件的关闭工作,即使出现异常也不例外。with语句也使用as关键字
- sys.stdout是Python中所谓的“标准输出”,可以从标准库的sys模块访问
- 标准库的pickle模块允许你容易而高效地从将Python数据对象保存到磁盘以及从磁盘恢复
- pickle.dump()函数将数据保存到磁盘
- pickle.load()函数从磁盘恢复数据
第五章笔记
列表排序
- 原地排序,排序后替换掉原本的列表:list.sort()
- 复制排序,复制一个副本后排序,保留了原来的列表:list.sorted()
一般一个列表转化为另外一个列表需要干哪几个步骤?
- 创建一个新列表来存放转换后的列表
- 迭代处理原列表中的数据
- 每次迭代时完成转换
- 将转换后的数据追加到新列表
clean_mikey=[]
for each_t in mikey:
clean_mikey.append(sanitize(each_t))
如果用列表推导的话只需要一行代码,不需要自己添加append()代码:
clean_mikey=[sanitize(each_t) for each_t in mikey]
Python中还有一个数据结构(列表list,元组tuple不能改变长度与值,集合set)set集合数据结构,集合数据不允许重复,没有排序要求。
set()BIF创建一个空集合,三种创建集合的方式:
- distances=set() 创建一个空结合
- distances={10.6,5.4,4.5}
- distances=set(list) 列表中所有重复项都被忽略掉
“原地”排序——转换然后替换
“复制排序”——转换然后返回
“方法串链”——从左向右读,对数据应用一组方法
“函数串链”——从右向左读,对数据应用一组函数
“列表推导”——在一行上指定转换(而不是使用迭代)
“分片”——从一个列表访问多个列表项
“集合”——一组无序的数据项,其中不包含重复项
- sort()方法可以在原地改变列表的排序
- sorted()BIF通过提供复制排序可以几乎对任何数据结构排序
- 向sort()或sorted()传入reverse=True可以按降序排列数据
- 如果有以下代码
new_l=[]
for t in old_l:
new_l.append(len(t))
使用列表推导重写这个代码,可以写作:
new_l=[len(t) for t in old_l]
- 要访问一个列表中的多个数据项可以用分片。例如:my_list[3:6]这会访问列表中索引位置3到(不包括)索引位置6的列表项
- 使用set()集合工厂方法可以创建一个集合
第六章笔记
pop()方法,会将列表指定位置的数据项删除,并返回对应的数据项
Python中的字典,是一个含有映射关系的数据结构,能够保存数据项的结构关系,创建方式可以有:
dict_data={} #直接用大括号包围实现直接创建
dict_data=dict() #利用dict()方法创建
Python使用class创建对象,每个定义的类都有一个特殊的方法,名为__init__(),可以通过这个方法控制如何初始化对象,类中的方法与函数的定义类似,也就是说同样使用def来定义,基本形式如下:
class Athlete:
def __init__(self):
#The code to initialize a "Athlete" object.
...
创建对象实例,不用new关键字,只需要将对类名的调用赋至各个变量
a=Athltet()
b=Athltet()
c=Athltet()
Python类中self参数很重要,因为python类的设计中,方法共享,属性不共享,因此每个方法都需要self参数,将目标标识符传进去处理。
创建对象的流程,调用类的定制工厂函数Athlete(),然后python处理这行代码时,它把工厂函数转换为Athlete().__init__(a)调用,这样就将目标标识符传进去了,所以函数方法中self参数很重要。
“字典”——这是一个内置的数据结构,允许将数据值与键关联
“键”——字典中查找的部分
“值”——字典中的数据部分(可以是任何值,也可以包括另一种数据结构)
“self”——这是一个方法参数,总是指向当前对象实例
- 使用dict()工厂函数或使用{}可以创建一个空字典
- 要访问一个名为person的字典中与键Name关联的值,可以使用我们熟悉的中括号记法,person['Name']
- 类似列表与集合,Python的字典会随新数据增加到这个数据结构中而动态扩大
- 可以先创建一个空字典:new_d=dict{}或new_d={}然后增加数据d['Name']='Eric Idle'来填充字典,或者也可一次完成以上的全部工作:new_d={'Name':'Eric Idle'}
- 可以用class关键字定义一个类
- 类方法(代码)与函数的定义基本相同,也就是说,要用def关键字定义
- 类属性(数据)就像对象实例中的变量
- 可以在类中定义__init__()方法来初始化对象实例
- 类中定义的每个方法都必须提供self作为第一个参数
- 类中每个属性前面都必须提供self作为第一个参数,从而将数据与其实例关联
- 类可以从零开始构建也可以从Python的内置类或从其他定制类继承
- 类可以放到一个Python模块中,并上传到Pypi