python学习笔记(二)

文件
文件打开模式:
这里写图片描述
f=open(path,mode) path中\需要转义,或者使用/
f.close()关闭文件
f.read(size=1)按照size字节读取,一个中文占两个字节
f.readline()读取一行
f.tell()返回当前文件指针位置
f.seek(offset,from)其中from为0时代表起始位置,1代表当前位置,2代表文件末尾
list(f)把文件内容转化一个列表
f.write(str)写入字符串
f.writelines(seq)其中seq是一个返回字符串的可迭代对象,字符串序列
用for循环迭代文件,每次返回的是文件中每行内容的列表对象

模块
包含你定义的函数和变量的文件,后缀是py
模块可以被其他程序所导入,以使用该模块中函数等功能
os模块:
import os
os.getcwd()返回当前工作目录
os.chdir(path)改变工作目录到path
os.listdir(path=’.’)列举目录中的文件名,其中.代表当前目录,..代表上一级目录
os.mkdir(path)创建单层目录
os.makedirs(path)创建多层目录,父目录和子目录同时创建
os.remove(path)删除文件
os.rmdir(path)删除单层目录,如果目录非空抛出异常
os.removedirs(path)删除多层目录
os.rename(old,new)重命名
os.system(command)运行系统的shell命令
以下为一些常量
这里写图片描述
os.path模块
os.path.basename(path)去除路径名,返回文件名
os.path.dirname(path)去除文件名,返回路径
os.path.join(‘c:\’,’path1’,’path2’)合并几个路径
os.path.split(path) 分割文件名和路径,返回元组
os.path.splitext(path)分割路径文件名和后缀,返回元组
os.path.getsize(file)返回单位为字节的文件尺寸

这里写图片描述
import time
time.gmtime(os.getatime(file))换算时间
time.localtime(os.getatime(file))换算为本地时间
这里写图片描述
pickle模块 将一些对象转换为二进制文件
pickle_file=open(‘xxx.pkl’,’wb’) 后缀名写成pkl方便记忆
pickle.dump(list, pickle_file)将某个list对象写入二进制文件中
list= pickle.load(pickle_file)读出二进制文件内容保存在list对象中

异常
常见异常:
这里写图片描述
这里写图片描述
try:
检测范围
except (Exception1,Exception2…) [as reason] [as e]:
处理
as reason是可选的参数,可以打印str(reason)
str(e.reason)变量说明异常原因;

except:
捕捉所有异常(不推荐)
捕捉到异常之后try语句内的语句不会执行,直接跳到异常处理部分

try:
检测内容
except (Exception1,Exception2) [as reason]:
处理
finally:
无论如何都会执行的代码段

raise Exception(‘解释内容’)
引发任意的异常

else语句
if 和else搭配

while循环和else搭配,只有while顺利结束(例如没有执行break,continue退出循环)
才会执行else语句后的内容
for循环和else搭配,同while语句.

else语句和try语句搭配,只有在try语句里无报错才会执行else后面的语句.

with语句
with open(“/tmp/foo.txt”) as f:
使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。
例如f的f.close()方法,无论with中出现任何错误,都会执行f.close()方法

类和对象
1._xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入 。
2、 __xx 双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问了,连子类也不可以用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)
3、 xx定义的是特列方法。用户控制的命名空间内的变量或是属性,如init , import或是file 。只有当文档有说明时使用,不要自己定义这类变量。 (就是说这些是python内部定义的变量名)

class Name: 类名第一个字母约定大写
实例对象:subject=Name()
封装: 隐藏对象的属性和实现细节
多态:不同类的同名方法实现不同
self相当于c++中的this指针

init(self)方法 (构造函数)
重写init(self,para1,para2…):
self.name=para1

python定义私有属性和方法(名字重整): 重整名为_Class__name
在方法或者变量前加上两个下划线__,私有属性只能由内部方法调用

继承:
class Name_1(Name):Name_1继承Name类,继承父类的方法和属性
子类重写方法会覆盖父类方法,如果需要父类的方法
1.调用未绑定的父类方法
例如:在Child类中的
def init(self):
Parent.init(self) #此时self为Child的实例对象
2.使用super函数
def init(self):
super().init() #不需要传入self函数

多重继承 继承多个父类的方法和属性
class Name_1(Name,Name_2)

类的其他
组合(横向类):在一个新类中实例化其他的类
同名属性会覆盖同名方法
绑定:方法必须要实例才能调用 (方法必须要self参数)
Class.dict()方法显示基本属性和方法
常见BIF:
issubclass(A,B) 检查A是否为B的子类
isinstance(object,class)检查object是否为class元组中的类实例对象
hasattr(object,’name’)检查object中是否有name属性
getattr(object,’name’)获得属性
setatter(object,’name’,value)设置name属性为value
delattr(object,’name’)删除name属性
x=property(fget=None,fset=None,fdel=None,fdoc=None)
即融合几种方法的属性,例如
Class.x等价于Class.fget()
Class.x=value等价于Class.fset(value)
del Class.x等价于Class.fdel()

魔法方法
init(self): 类似于构造方法
重写def init(self,para1,para2…):
self.name=para1

返回值必须为None

new(class[,…]):
返回一个实例对象
例如Capstr继承str类,str类是无法改变的,此时Capstr可以重写new方法
class Capstr(str):
def new(class,string):
string=string.upper()\
return str.new(class,string)

del(self): 类似析构方法
是一种垃圾回收方法,在所有对象引用都被删除时才会调用
重载符号;self为左对象
这里写图片描述
反运算:右对象
这里写图片描述
属性访问:
gettattr(c,’x’,’don’t have it’)
x=property(fget=None,fset=None,fdel=None,fdoc=None)
即融合几种方法的属性,例如
Class.x等价于Class.fget()
Class.x=value等价于Class.fset(value)
del Class.x等价于Class.fdel()

一些属性访问的魔法方法
getattr(self,name)访问一个不存在的属性行为
非重写部分最好调用父类的super().getattr(self,name,value)
getattribute(self,name)访问一个存在的方法的行为
setattr(self,name,value)设置一个属性,
非重写部分最好调用父类的super().setattr(self,name,value)
或者使用self.dict[name]=value
delattr(self,name)删除一个属性

定制容器:
这里写图片描述
这里写图片描述
迭代器:
提供迭代方法的容器,列表也是迭代器,通过for循环可以触发迭代器
t=iter(可迭代对象),t就是一个迭代器
next(t)迭代t的下一个对象,没有迭代对象抛出一个StopIteration的异常

迭代器实现的魔法方法:
iter():
return self
next()
return next指向的对象
例如斐波那契数列迭代器:
class Fibs:
def init(self):
self.a=0
self.b=1
def iter(self)
return self
def next(self)
self.a,self.b=self.b,self.a+self.b
通过for循环可以触发迭代器

生成器:
简化迭代器而诞生(带yield的函数)
yield类似于return,但是yield后面的语句返回后函数不停止,只是暂停,
使用next方法可以继续执行
例如斐波那契数列生成器:
def libs():
a = 0
b = 1
while True:
a,b = b,a+b
yield a
使用for循环即可迭代
for each in libs()
print(each)

列表推导式:a=[i for i in range(100) if not(i%2) and i %3]
表示100以内能被2整除不能被3整除的数,即条件表达式为真时的i
字典推导式:b={i:i%2==0 for i in range(10)}
打印出条件表达式的结果
集合推导式:c={i for i in list[]}过滤掉重复的元素
生成器推导式:
e=(i for i in range(10) condition)
(subject iterate subject condition)

模块:
import 模块名
from 模块名 import 函数名

from 模块名 import * 导入所有函数,不建议使用
import 模块名 as 别名

if name ==’main
只有在主程序时才调用

搜索路径:
import sys
sys.path 显示搜索路径
sys.path.append(‘目录 ‘)

包:
创建一个文件夹存放模块
创建一个init.py的文件,可以为空
import 包名.模块名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值