设计模式是面向对象语言特有的内容,是我们在面临某一问题时固定的做法
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 <class 'ZeroDivisionError'> 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")
常见异常:
SyntaxError: | 语法错误 |
NameError | 尝试访问一个没有申明的变量 |
ZeroDivisionError | 除数为0的错误 |
ValueError | 数值错误 |
TypeError | 类型错误 |
AttributeError | 访问对象不存在的属性 |
IndexError: | 索引越界异常 |
KeyError: | 字典的关键字不存在 |
ArithmeticError | 所有数值计算错误的基类 |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
BaseException | 所有异常的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
EnvionmentError | 操作系统错误的基类 |
EOFError | 没有内建输入 到达EOF标记 |
Exception | 常规错误的基类 |
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:\python\pc\01\try except.py", line 12, in <module> raise AgeError(age) __main__.AgeError: 999 input age is error
创建文件对象open()
open()函数用于创建文本对象 语法格式如下:
open(文件名[打开方式])
r 读模式
w 写模式 如果文件不存在则创建 文件存在 则重写新内容
a 追加模式 如果文件不存在则创建 文件存在,则在文件末尾追加内容
b 二进制模式 (可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)
f = open("a.txt",a)
a = "feichanghao\n"
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 study\n"] 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 study\n'] [(0, 'I love program!\n'), (1, 'I love English!\n'), (2, 'I love study\n')] ['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') #可读的二进制文件对象