文件操作
open()函数
#读取文件
f = open("文件地址","w")#以写入状态打开文件
f.close()#关闭文件
f.read(5)#从文件读取n个字符,不个参数n则读取全部文件
f.readline()#按行读取
f.seek(0,0)#重置文件指针位置,参数:第一参数--指针移动的字节数。第二参数--指针开始移动的位置,0---表示从头开始,1----表示从当前位置算起,2----表示从文件末尾算起
f.write("str")#向文件写入字符串
f.writelines(list)#向文件写入一个可迭代得字符串序列
f.tell()#返回文件指针位置
#循环操作文件的每一行
for each_line in f:
	#dosomething
	print(each_line)
文件操作:OS模块

os模块

#引入模块
import os
#返回当前模块
os.getcwd()
#改变工作目录
os.chdir("d://test")
#列举指定目录中的文件名 
os.listdir(path='.')
#创建单层/多层目录
os.mkdir(path)#目录存在抛出异常
os.mkdirs(path)#目录存在抛出异常
#删除文件/目录
os.remove(path)
os.rmdir(path)#目录非空抛出异常
os.removedirs(path)#递归删除目录
#修改名字
os.rename(old,new)

os path模块

#去掉目录路径,返回文件名
os.path.basename(path)
#去掉文件名,返回路径
os.path.dirname(path)
#组合路径
os.path.join(path1,path2····)
#分割文件路径
os.path.split(path)
#分割文件名与扩展名
os.path.splitext(file)
#获取文件大小,单位字节
os.path.getsize(file)
#返回文件最新修改时间
os.path.getmtime(file)
#判断路径目录或问价是否存在
os.path.exists(path)
#判断路径是否存在目录
os.path.isdir(path)
#判断路径是否存在文件
os.path.isfile(path)
#判断路径是否为绝对路径
os.path.isabs(path)
#判断两个路径是否指向同一个文件
os.path.samefile(path1,path2)

数据持久化
pickle模块

import pickle
pickle_file=open(path,"wb")
#数据持久化,保存的数据为2进制
pickle.dump(param,pickle_file)#param想要保存的数据、pickle_file保存路径
#数据读取
pickle_load=open(path,"rb")#rb 2进制读取
fileContent=pickle.load(pickle_load)
异常处理
try:
	#do something
except Exception [as param]:
	#param中包含错误原因
	#do something
except (OSError , TypeError):
	#抓捕多个异常
except:
	#抓取所有错误
finally:
	#必执行代码

手动抛出异常

#使用raise关键字
raise Exception
流程控制语句if else
#if else : 条件不满足时执行else
if 条件:
	#do something
else:
	#do something
#while else 当while无错执行、无break、无continue时执行else代码块
while 条件:
	#do something
else:
	#do something
#for else 当for无错执行、无break、无continue时执行else代码块
for 条件:
	#do something
else:
	#do something
#try else 当try 无错执行、无break、无continue时执行else代码块
try:
	#do something
except Exception:
	#do something
else:
	#do something
类、方法、继承
同java,封装、继承、多态 继承: 1.单继承 class Child(Parent): 多继承 class Child(Parent1 , Parent2 ····): 无法确定时尽量减少使用多继承 2.调用父类方法---ParentClassName.parentFunction()
#定义类 继承类Person
class MyPersion(Person):
	#定义属性
	name="name"
	gender="women"
	#构造函数
	def __init__(self,name,gender):
		#调用父级函数 
		#写法一
		Person.__init__(self)
		#写法二
		super().__init__()
		
		self.name = name
		self.gender = gender
	#定义类函数 self同java中的this,与java不同的是,定义类函数必须有
	def eat(self,food):
		#do something
		print("吃"+food)

#创建对象 当有init函数时,必须传值
param = MyPersion("name","women")

#类变量作用域
class Persion:
	#私有变量 伪私有,可通过_ClassName.__param 访问
	__gender = "man"
	#get函数
	def getGender(self):
		return self.__gender

#issubclass 检查是否子类
issubclass(child , parent) #返回true

#isinstance 检查对象是否属于类
isinstance(obj , className) #返回布尔值

#hasattr 检查对象是否是指定对象
hasattr(obj , paramName)

#getattr 从对象中获取指定对象
getattr(obj , paramName)
getattr(obj , paramName , default) #判断obj中是否含有paramName属性,没有返回default

#delattr 从对象中删除指定对象
delattr(obj , paramName)

#property 整合对象的get、set、del方法
class MyClass:
	def __init__(self):
		self.param="a"
	def getParam(self):
		return self.param
	def setParam(self,param):
		self.param=param
	def delParam(self):
		del self.param
	param = property(getParam, setParam , delParam)
#对象通过param对属性param来进行get、set、del操作
obj=MyClass()
obj.param #会自动调用getParam函数
obj.param=10 #会自动调用setParam函数
del obj.param #自动调用delParam函数
#优点:当修改类中的get、set、del函数时不会影响调用的函数
构造函数、析构函数
class MyClass:
	#对象创建前调用
	def __new__(clas)pass
	#构造函数
	def __init__(self,param):
		self.param=param
	#析构函数
	def __del__(self):
		#当对象被删除时调用,不声明使用python默认。用于回收内存
		pass
	#相当于java的toString方法重写
	def __str__(self):
		return self.param
	#当用户访问不存在的属性时执行该方法
	def __getattr__(self,name):
		pass
	#当用户访问属性时执行
	def __getattribute__(self,name):
		pass
	#当用户属性被设置时调用
	def __setattr__(self,name):
		pass
	#当用户删除属性时调用
	def __delattr__(self,name):
		
		
#析构函数当当前对象的全部引用被删除时才会调用
obj = MyClass()
obj2=obj
obj3=obj2
del obj3
del obj
#当删除obj2的时候,才会执行析构函数__del__
del obj2
描述符
描述符类必须重写__get__、__set__、__delete__中的一个或者多个。 描述符类的作用实质上与property方法相同。所不同的是,描述符类中的方法是自己设定的。感觉描述符类像是java拼装类中的基础类。通过重写的get、set、delete方法实现相应的功能。
#描述符类
class MyProperty:
	def __init__(self, fget=None,fset=None,fdel=None):
		self.fget=fget
		self.fset=fset
		self.fdel=fdel
		
	#instance相当于实例
	def __get__(self , instance,owner):
		return self.fget(instance)
		
	def __set__(self,instance ,value):
		self.fset(instance,value)
		
	def __del__(self,instance,instance):
		self.fdel(instance)

#使用描述服类
class MyClass:
	def __init__(self):
		self.param="param"
	def getX(self):
		return self.param
	def setX(self ,vlaue):
		self.param=value
	def delX(self):
		del self.param
	
	#使用描述符类,此时描述符类使用默认的函数与property()函数用法相同
	paramMethod = MyProperty(getX,setX,delX)

#描述符的简便用用
class MyClass:
	def __init__(self,num = 0):
		self.num  = num
	
	#加上该注解后相当于get函数
	@property
	def num(self):
		return self.num
	
	#相当于set函数
	@num.setter
	def num(self,num):
		if(num < 0 ):
			self.num=0
		else:
			self.num=0
			
	#相当于delete函数
	@num.deleter
	def num(self):
		del self.num
迭代器、生成器(协程)

迭代器
iter()、next()

string="python"
t=iter(string)
next(t) #依次输出每个字符
#当没有数据可迭代时,抛出异常

生成器
协程就是生成器,但是协程不是官方用语,只是便于讨论。
yield关键字。如下demo,第一次调用函数返回1,第二次调用时,返回2。遇见yield程序挂起,再次调用继续执行。
yield关键字修饰的函数,可以变相看成一个迭代器,可以通过next()函数调用。

def myMth():
	print("demo")
	yield 1
	yield 2
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐