HeadFirst Python记事本

第一章笔记

"BIF"内置函数
"组(suit)"Python代码块,会通过缩进来指示分组
"功能齐全(Batteries included)"这是指Python提供了快速高效地完成工作所需的大多数功能

  • 从命令行或者IDLE中运行Python3
  • 标识符是指数据对象的名字。标识符没有“类型”,不过标识符所指示的数据对象有类型
  • print() BIF会在屏幕上显示一个消息
  • 列表是一个数据集合,数据项之间用逗号分隔,整个列表用中括号包围
  • 列表就像打了“激素”的数组
  • 可以用BIF处理列表,另外列表还支持一组列表方法
  • 列表可以存放任意数据,而且数据可以是混合类型,列表还可以包含其他列表
  • 列表可以随意伸缩,数据使用的所有内存都由Python为你管理
  • Python使用缩进将语句归组在一起
  • len() BIF会提供某个数据对象的长度,或者统计一个集合中的项数,如列表中的项数
  • for循环允许迭代处理一个列表,这通常比使用一个等价的while循环更方便
  • 可以利用if...else...语句在代码中完成判定
  • isinstance() BIF会检查一个标识符是否指示某个指定类型的数据对象
  • 使用def来定义一个定制函数

第二章笔记

发布到PyPi

  1. 首先新建一个文件夹保存模块
  2. 在新文件夹中创建一个名为“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',
      )
  1. 构建一个发布文件,在windows系统下,打开管理员命令行进入新建的文件夹目录下,键入命令:D:\Python35\python.exe setup.py sdist
  2. 将发布安装到Python 本地副本中,同样在上一步中的命令行窗口中键入:D:\Python35\python.exe setup.py install
  3. 使用模块的时候记得命名空间的关系,看如何导入的,决定如何使用模块中的方法或变量
  4. 上传到Pypi网站,与大家共享代码,首先注册一个账号,然后在本地命令行窗口中再次确认注册的账号,每台电脑安装python后主需要注册本地注册账号一次,使用命令:D:\Python35\python.exe setup.py register
  5. 注册后即可上传,同样在命令行键入:D:\Python35\python.exe setup.py upload
  6. 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()

一般一个列表转化为另外一个列表需要干哪几个步骤?

  1. 创建一个新列表来存放转换后的列表
  2. 迭代处理原列表中的数据
  3. 每次迭代时完成转换
  4. 将转换后的数据追加到新列表
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

你可能感兴趣的:(HeadFirst Python记事本)