"""
有时候我们需要将我们保存的文本恢复为一个字典或者序列,Python为此提供了一个pickle包解决此问题;
存放我们叫做pickling;
读取:unpickling;
pkl是pickle简写
"""
import pickle
my_list=[122,23234,'python']
pickle_file = open('my_list.pkl','wb')#使用wb形式
pickle.dump(my_list,pickle_file)#倒入文件,也就是写入文件
pickle_file.close()#关闭文件,执行完此步骤后会生成一个my_list.pkl的二进制文件,可以使用ue打开;
#读取
pickle_file = open('my_list.pkl','rb')#注意是rb
my_list = pickle.load(pickle_file)
print(my_list)#[122, 23234, 'python']
pickle_file.close()
my_lsit=['hello']
#assert len(my_lsit)!=1 不等于1时引发异常
try:
f = open('22.txt')
f.close()
except OSError as reason:#OSError代表监控哪一类异常
print('文件出错:'+str(reason))#文件出错:[Errno 2] No such file or directory: '22.txt'
finally:#无论如何此语句都会被执行
print('这里处理诸如文件没有关闭之类情况,比如关闭文件')
#else语句基本与c相同,但进行了扩展,可以和while,for,异常配合使用,但在循环中只有执行完了循环才会被执行;
#注意for调用和while是相同的
def testFunc(num):
while num>1:
if(num%2==0):
print('未执行完成while')
break
print('正常执行完成while')
else:#也就是说else要执行必须保证while所有代码被执行完成,而不是遇到中途跳出;
print('执行完while后被执行')
#这里处理诸如文件没有关闭之类情况,比如关闭文件
#执行完while后被执行
testFunc(1)
testFunc(2)#未执行完成while
try:
int('123')
except ValueError as reason:
print('出错啦')
else:
print('运行正常')#这里只有不异常时才会被执行,和循环语句一个道理
#with主要目的是简化运算以及防止某些异常,如:
try:
with open('22.txt','rb') as f:#局部作用
print('open')
except:
print('failed')
class Objectx:#类名大写
__age__=18#变量默认为公有,如果需要私有则使用两个双下划线
def name(self,a):#self就是this,表明是哪一个对象在调用方法
age = a
ob = Objectx()#注意定义方式与c不同。
ob.name(88)
class sun(Objectx):#继承类,y=也可以继承内建库中的类;
pass
class father():
def __init__(self):
pass
class sub(father):#Python支持多重继承
def __init__(self):
father.__init__(self)#调用父类构造初始化,这里的self是子类的self,注意不是父类的;但需要指定传递参数
super().__init__()#自动寻找基类方法进行初始化
s = sub()
#组合
class Tutle:
def __init__(self,x):
self.num = x
class Fish:
def __init__(self,x):
self.num = x
class Pool:
def __init__(self,x,y):
self.tutle = Tutle(x)
self.fish = Fish(y)
def print_num(self):#如果不加self,则相当于c的静态函数,调用方式是Pool.print_num()
print(self.tutle.num,self.fish.num)
p = Pool(1,8)
p.print_num()
#迭代器:序列,字典,python提供了两个内建操作,iter(),next(),next到最后会抛出异常
for i in 'hello':
print(i)
links={'百度':'wwww.baidu.com',"bing":'wwww.bing.com.cn'}
for i in links:
print(i,links[i])
class Fish:
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
return self.a
fish =Fish()
for i in fish:
if i<100:
print(i)
else:
break
#生成器:
def myFun():
print('excute')
yield 1#跟return相同,只是函数只是暂时挂起,再次执行时接着之前执行
yield 2
f = myFun()
next(f)
next(f)
#__main__
#if __name__ == '__main__' 主要是导入模块时防止该模块测试函数被调用
#__name__代表模块的名字,加上此句话表明该模块只被导入不执行;