
设计模式是面向对象语言特有的内容,是我们在面临某一问题时固定的做法
class CarFactory:
def carName(self,name):
if name == "benchi":
return Benchi()
elif name == "BiYardi":
return BiYardi()
elif name == "BaoMa":
return BaoMa()
elif name == "FEi":
return FEi()
else: return "输入错误"
class Benchi:
pass
class BiYardi:
pass
class BaoMa:
pass
class FEi:
pass
a = CarFactory()
b=a.carName("BaoMa")
print(b)
#输出
<__main__.BaoMa object at 0x000002C53FBDFF10>
工厂和单例的整合
class CarFactory:
__obj=None
__init__flag=True
def carName(self,name):
if name == "benchi":
return Benchi()
elif name == "BiYardi":
return BiYardi()
elif name == "BaoMa":
return BaoMa()
elif name == "FEi":
return FEi()
else: return "输入错误"
def __new__(cls,*args, **kwargs):
if cls.__obj==None:
cls.__obj=object.__new__(cls)
return cls.__obj
def __init__(self):
if CarFactory.__init__flag:
print("int******")
CarFactory.__init__flag=False
class Benchi:
pass
class BiYardi:
pass
class BaoMa:
pass
class FEi:
pass
a = CarFactory()
b=a.carName("BaoMa")
c=a.carName("FEi")
print(b)
print(c)
int******
<__main__.BaoMa object at 0x00000211536CFE80>
<__main__.FEi object at 0x00000211536CFE50>
try__except 基本结构
print("step0")
try:
print("step1")
a=3/0
print(step2)
except baseException as e:
print(e)
print(type(e))
print("stept3")
step0
step1
division by zero
stept3
while True:
try:
a = int(input("please input number"))
if a == 888:
print("end", a)
break
else:
print(a)
except baseException as e:
print(e)
print("it is error,please re-enter")
print("it is ending")
常见异常:
trackback模块的使用 异常写入文件
try:
print("step0")
a=3/0
print(a)
except:
with open("文件地址","") as f:
traceback.print_exc(file=f)
自定义异常类
class AgeError(Exception):
def __init__(self,age):
Exception.__init__(self)
self.age=age
def __str__(self):
return str(self.age) + " input age is error"
if __name__=="__main__":
age = int(input("please input age:"))
if age<1 or age>150:
raise AgeError(age)
else:
print("normal age:",age)
Traceback (most recent call last):
File "D:pythonpc1try except.py", line 12, in
raise AgeError(age)
__main__.AgeError: 999 input age is error
创建文件对象open()
open()函数用于创建文本对象 语法格式如下:
open(文件名[打开方式])
r 读模式
w 写模式 如果文件不存在则创建 文件存在 则重写新内容
a 追加模式 如果文件不存在则创建 文件存在,则在文件末尾追加内容
b 二进制模式 (可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)
f = open("a.txt",a)
a = "feichanghaon"
f.write(a)
f.close()
文件对象的常用方法
raed([size]) 从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件
读取到文件末尾,会返回空字符
readline()读取一行内容作为结果返回。读取到文件末尾,会返回空字符
readlines() 读取文件中,每一行作为一个字符串存入列表
write(str) 将字符串str内容写入文件
writelines(s) 将字符串列表s写入文件中,不添加换行字符
seek(offset[,whence]) 把文件指针移动到新的位置,offset表示相对于whence的多少个字节的偏移量;
offset:
off为正忘结束方向移动,为负方向开始方向移动
whence不同的值代表不同的含义:
0 从文件头开始计算(默认值)
1 从当前位置开始计算
2 从文件尾开始计算
tell() 返回文件指针的当前位置
truncate([size]) 不论指针在什么位置,只留下指针前size个字节的内容,其余全部删除;
如果没有传入size,则指针当前那位置到文件末尾内容全部删除
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源
with open("e.txt","r",encoding="utf-8") as f:
print("文件名:{0}".format(f.name))
print(f.tell())
print("读取的内容是:{0}".format(str(f.readline())))
print(f.tell())
f.seek(3) #中文在utf-8中占三个字节
print("读取的内容是:{0}".format(str(f.readline())))
文件名:e.txt
0
读取的内容是:我love study
15
读取的内容是:love study
enumerate()函数和推导式生成列表
a = ["I love program!n","I love English!n","I love studyn"] b = enumerate(a) print(a) print(list(b)) #rstrip 用来去除n字符 temp指列表中的元素 c = [temp.rstrip()+" #"+str(index) for index,temp in enumerate(a)] print(c) ['I love program!n', 'I love English!n', 'I love studyn'] [(0, 'I love program!n'), (1, 'I love English!n'), (2, 'I love studyn')] ['I love program! #0', 'I love English! #1', 'I love study #2']
f=open(r"d:a.txt",'wb') #可写的、重写模式的二进制文件对象
f=open(r"d:a.txt",'ab') #可写的、追加模式的二进制文件对象
f=open(r"d:a.txt",'rb') #可读的二进制文件对象
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)