1、常用文件操作# 打开指定路径下文件不存在就创建fopen(test.txt,w,encodingutf-8)# 写入f.write(Python 是一个非常好的语言。\n是的的确非常好!!\n)# 读取strf.read()print(str)关闭 f.close()# 获取当前工作目录的路径current_diros.getcwd()# 列出指定目录中的所有文件和子目录current_diros.listdir()# 创建一个新的目录如果目录已经存在会抛出 FileExistsError 异常os.mkdir(new_directory)# 删除一个空目录。如果目录不为空会抛出 OSError 异常# os.rmdir(new_directory)# 删除一个文件。如果文件不存在会抛出 FileNotFoundError 异常os.remove(test.txt)# 重命名文件或目录os.rename(old_name.txt,new_name.txt)# 获取指定环境变量的值。如果环境变量不存在返回 Nonehome_directoryos.getenv(HOME)print(HOME 目录:,home_directory)2、字符串可访问和截取字符串中的值strHello World!# 字符串使用方括号 [] 来截取字符串索引值以 0 为开始值-1 为从末尾的开始位置print(str[0])# 输出Hprint(str[-1])# 输出!print(str[1:4])# 输出ellprint(str[0:6]Hu!)# 输出Hello Hu!在需要在字符中使用特殊字符时python 用反斜杠 \ 转义字符# 常用转义字符如下# 换行符print(Hello, world!\nHow are you?)# 输出换行效果# 横向制表符print(Hello, world!\tHow are you?)# 输出Hello, world! How are you?# 将 \r 后面的内容移到字符串开头并逐一替换开头部分的字符直至将 \r 后面的内容完全替换完成# 典型用途是做进度条显示做循环的时候可以一直覆盖上一轮的输出实现实时更新显示的效果foriinrange(101):# 添加进度条图形和百分比bar[*(i//2) *(50-i//2)]print(f\r{bar}{i:3}%,end,flushTrue)time.sleep(0.05)# 最终输出[] 100%字符串运算符常用aHellobworldprint(ab)# 输出Helloworldprint(a*2)# 输出HelloHelloif(Hina):print(H 在变量 a 中)if(Mnotina):print(M 不在变量 a 中)# %s格式字符串%d格式化整数print(我叫%s今年%d岁!%(小明,10))# 输出我叫小明今年10岁!# %f格式化浮点数字可指定小数点后的精度num3.1415926print(%.2f%num)# 输出3.14# 三引号允许一个字符串跨多行para_str -这是一个 -多行字符串的实例 print(para_str)# f-stringprint(fab:{ab})字符串内建函数常用# 返回长度print(len(a))# 输出5# 将字符串的第一个字符转换为大写print(a.capitalize())# 输出Hello# 检查字符串是否以 xxx 结束可指定检查的范围,如果是返回 True,否则返回 Falseprint(a.endswith(.txt,2))# 从索引2开始 输出Falseprint(a.endswith((.jpg,.png,.gif)))# 输出False# 检测 xx 是否包含在字符串中,可指定检查的范围,如果包含返回开始的索引值否则返回-1print(a.find(m,0,3))# 输出-1# 转换字符串中所有大写字符为小写print(b.lower())# 输出world# 转换字符串中的小写字母为大写print(b.upper())# 输出WORLD# 将字符串中的xx替换成xxprint(a.replace(lo,.))# 输出hel.#以 str 为分隔符截取字符串print(b.split(r))# 输出[wo, ld]3、面向对象四大核心特性封装把事物的数据属性 和操作方法 打包藏在类内部对外只暴露可用接口隐藏内部复杂逻辑。eg:手机类内部电路、芯片运行是封装起来的 使用的时候你只需要调用 call()、playMusic()不用管电路原理是怎么实现的。继承一个类可以复用另一个类的代码还能新增自己独有的功能减少重复代码。eg:Student(学生) 继承 Person(人) 自动拥有姓名、说话功能额外新增 study() 学习方法。多态同一个方法不同对象调用会有不同表现。eg:定义「动物」类 speak()猫实现是 “喵”狗实现是 “汪” 统一调用 speak() 却输出不同内容。# 父类动物classAnimal:defspeak(self):pass# 子类1狗classDog(Animal):defspeak(self):print(汪汪汪)# 子类2猫classCat(Animal):defspeak(self):print(喵喵喵)# 统一调用函数只要求对象有speak方法不关心是什么动物defmake_sound(animal):animal.speak()# 多态演示dogDog()catCat()# 同一个make_sound函数传入不同对象行为完全不同make_sound(dog)# 汪汪汪make_sound(cat)# 喵喵喵抽象提取一类事物的共同特征只关心通用行为忽略细节实现。eg:定义「交通工具」抽象类只规定必须有 run()汽车、飞机各自实现 run()。fromabcimportABC,abstractmethod# 抽象父类图形通用模板不能newclassShape(ABC):# 抽象方法只定义接口不写实现abstractmethoddefget_area(self):获取图形面积子类必须重写此方法pass# 子类1圆形实现抽象方法classCircle(Shape):def__init__(self,r):self.radiusrdefget_area(self):# 圆形面积公式πr²return3.14*self.radius**2# 子类2矩形实现抽象方法classRectangle(Shape):def__init__(self,w,h):self.widthw self.heighthdefget_area(self):# 矩形面积宽×高returnself.width*self.height# 测试多态抽象defprint_area(shape:Shape):print(f图形面积{shape.get_area()})cCircle(5)rRectangle(4,6)print_area(c)# 圆形面积78.5print_area(r)# 矩形面积244、类(Class)用来描述具有相同的属性和方法的对象的集合。对象是类的实例。在 Python中self 是一个惯用的名称用于表示类的实例对象自身。当你定义一个类并在类中定义方法时第一个参数通常被命名为 self尽管你可以使用其他名称但强烈建议使用 self以保持代码的一致性和可读性。类定义了__init__()方法类的实例化操作会自动调用__init__()方法classPeople:name# 公有变量__age0# 两个下划线开头声明该属性为私有变量只能在类内部调用# 类有一个名为 __init__() 的特殊方法构造函数def__init__(self,_name,_age):self.name_name self.__age_ageprint(init)defspeak(self):str我叫%s今年%d岁!%(self.name,self.__age)returnstrp1People(小明,18)# 输出initprint(p1.speak())# 输出我叫小明今年18岁!print(p1.name)# 输出小明print(p1.__age)# 输出报错找不到__age属性继承和重写子类派生类会继承父类基类的属性和方法如果你的父类方法的功能不能满足你的需求你可以在子类重写你父类的方法。classParent:# 定义父类defmyMethod(self):print(调用父类方法)classChild(Parent):# 定义子类defmyMethod(self):print(调用子类方法)cChild()# 子类实例c.myMethod()# 子类调用重写方法# super() 函数是用于调用父类(超类)的一个方法super(Child,c).myMethod()#用子类对象调用父类已被覆盖的方法5、错误和异常捕捉推荐写法whileTrue:try:xint(input(请输入一个数字: ))breakexceptExceptionase:print(错误信息,e)5、Python「魔法方法特殊方法以前后双下划线包裹的方法__xxx__在 Python 里叫 dunder method双下方法 / 魔法方法是 Python 内置约定解释器会自动识别并在特定语法场景自动调用不用靠你手动调用。# 正确双下划线魔法方法with自动触发classTimerOk:def__enter__(self):print(进入计时)returnselfdef__exit__(self,*args):print(结束计时)withTimerOk():pass# 输出# 进入计时# 结束计时# 错误单下划线只是普通方法with完全不生效classTimerBad:def_enter_(self):print(进入计时)returnselfdef_exit_(self,*args):print(结束计时)withTimerBad():pass# 无任何打印_enter_/_exit_ 根本没被执行6、装饰器Python 是一门函数是一等对象一等公民 的编程语言有两个关键特性让你能在函数内部定义另一个函数函数本身就是一个普通对象可以像数字、字符串一样被创建、存变量、当参数、当返回值作用域规则允许嵌套定义在任意代码块函数 /if/ 循环里都能定义新函数内部函数只在外部函数作用域内可见。你代码里的结构拆解# 外层函数装饰器 log_time_and_goodbyedeflog_time_and_goodbye(func):# 内层嵌套函数wrapper写在外层函数内部完全合法defwrapper():print(f[{time.ctime()}] 开始执行)func()print(再见)# 把内部函数对象返回出去returnwrapperlog_time_and_goodbye# ← 这行就是“给 greet 穿上装饰器外套”defgreet():print(你好)运行 greet()输出[Mon Jun1015:23:452024]开始执行 你好 再见✨ 总结一句话装饰器 函数的“化妆师” “助理” “保安” —— 它在不碰原函数一根手指头的前提下悄悄增强功能、控制流程、统一管理。