python学习(fifth)
前言:
今天睡过头了,7点多醒了一回,就想着再睡一会,9点会有闹钟叫我的,结果9:29才醒来,手机自动关机了,ε=(´ο`*)))唉,这都是小事,我总觉得我干什么都没精神,干什么都好累,md,食欲倒是挺好,是不是总抽烟的事啊,那每天少抽一点吧,饮食的话,我也没什么好办法,吃的也就那样,一点蔬菜都没有,最近倒是越来越馋了。ε=(´ο`*)))唉,情绪也比较悲观,外面天气死热,就没有一个正面buff吗,算了,不说了,去学习吧。
一、项目交接
1-虚拟环境
虚拟环境 让每一个项目都有独立的依赖环境,避免不同项目之间的依赖冲突
创建虚拟环境:
python -m venv venv
激活虚拟环境:
venv/Scripts/activate
退出虚拟环境:
deactivate
二、函数进阶
2-闭包
外层函数执行完毕后,局部变量本该销毁,但闭包会保留变量,供内层函数后续调用。
优点:保存函数状态、减少全局变量、简化代码结构
缺点:外层变量会常驻内存,内存占用比普通函数高
3-lambda 匿名函数
给我的感觉就是方便
配合 sorted() 排序自定义规则
lst = [("张三",18),("李四",16)]
res = sorted(lst, key=lambda x: x[1])
临时简单逻辑,不用单独定义命名函数
限制:只能一行表达式,复杂逻辑必须用def定义普通函数。
4-高阶函数
接收函数作为参数,或者返回一个函数的函数,就是高阶函数。
能增强函数功能,就是复杂
map:遍历,别的不干。
filter:过滤,只保留函数返回True的元素。
reduce:依次把前一次结果和下一个元素传入函数运算,累计计算。
5-装饰器基础
无语法糖时:
def deco(func): # 内层包装函数 def wrapper(*args, **kwargs): # 前置功能 print("函数开始执行") res = func(*args, **kwargs) # 执行原函数 # 后置功能 print("函数执行结束") return res return wrapper # 手动赋值 def test(): print("原函数逻辑") test = deco(test) test()有语法糖时:
def deco(func): def wrapper(*args, **kwargs): print("前置") r = func(*args, **kwargs) print("后置") return r return wrapper @deco def test(a,b): return a+b常用:
日志记录、运行耗时统计、权限校验、异常捕获、接口缓存。
三、面向对象
1-类和对象
类:模板、图纸,定义一类事物共同属性和行为
对象 / 实例:根据模板创建出的具体个体
Python 万物皆对象:数字、字符串、字典、列表全都是某个类的实例
2-继承和多态
子类可以直接复用父类的属性与方法,减少重复代码
语法:class 子类(父类)
super():
调用父类被重写的方法,常用在子类构造函数:
class Cat(Animal): def __init__(self, name): super().__init__() # 执行父类__init__ self.name = name多态:
同一个方法,不同子类实现不同逻辑,调用时自动匹配对应子类实现。
核心:关注父类抽象,不关注具体子类类型
3-封装和属性
封装:
将属性、方法打包进类内部
隐藏私有数据,不允许外部随意修改,仅开放指定访问入口
私有属性:
Python 约定:以__双下划线开头的属性,视为私有,外部无法直接访问
class Person: def __init__(self, age): self.__age = age # 私有属性@property 装饰器(属性伪装)
把方法伪装成属性,用.直接调用,不用加括号;常用于私有属性的读取、修改、删除。
class Person: def __init__(self, age): self.__age = age # 读 @property def age(self): return self.__age # 修改 @age.setter def age(self, val): if 0 < val < 150: # 增加数据校验 self.__age = val else: print("年龄不合法") p = Person(18) print(p.age) # 像访问属性一样取值 p.age = 20 # 赋值修改4. 类方法 和 静态方法
类中一共 3 种方法,区别由第一个参数区分:
① 实例方法(最常用)
- 第一个参数:
self - 只能由实例对象调用,操作实例属性
② 类方法 @classmethod
- 装饰器:
@classmethod - 第一个参数:
cls(代表当前类本身) - 可以用类名。方法 ()/ 对象。方法 () 调用
- 只能操作类属性,不能直接使用实例属性
class Tool: count = 0 @classmethod def show_count(cls): print(cls.count)③ 静态方法 @staticmethod
- 装饰器:
@staticmethod - 无默认必须参数,就是普通函数放在类里
- 类、对象都可以调用,和类 / 实例本身几乎无绑定
- 适合写和类弱相关的工具工具函数
class MathUtil: @staticmethod def add(a,b): return a+b三者选用总结
- 要操作实例变量 → 实例方法
- 只操作类变量 → 类方法
- 和类、实例都无关,单纯工具函数 → 静态方法
