Python 学习笔记(十)---推导式、面向对象
第一部分 推导式 + 生成器
1.1. 推导式
列表推导式
集合推导式
1.格式为
{表达式 for x in iterable if 条件}
或者
{表达式1 if 条件 else 表达式2 for x in iterable }
2.集合推导式有去重功能
字典推导式
注意没有元组推导式。
1.2. 生成器(推导式)--generator
函数+yield
注意:
1.定义函数+添加关键字--yield;
2.调用函数等到的是一个生成器对象;
3.结合next(生成器对象),只要遇到yield则会将其后面的值返回并且暂停,下一次再调用next(生成器对象),则从暂停位置开始执行。
4.如果函数有返回值,返回值的内容会作为,生成器里面的元素取完之后报错的信息:StopIteration:返回值的内容。
生成器主要在多任务协程中用到(多任务切换)。
1.3.可迭代 、迭代器、生成器关系
可迭代的:Iterable
可以通过for循环来遍历的对象,这种遍历我们成为迭代(Iteration)
迭代器:Iterator
可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator。
可以适应isinstance()判断一个对象是否是Iterator对象。
生成器:generator
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在python中,这种一边循环一边计算的机制,成为生成器:generator。
可迭代的不一定是迭代器,可以尝试通过iter()将可迭代的转换为迭代器。
第二部分 面向对象
2.1 类定义的格式:
class 类名:
属性(特征)
方法(动作)
注意:类名,首字母大写,如果是多个单词遵循驼峰式命名。
2.2 对象的创建
先定义类,通过类创建(构建)对象。
格式:
对象名 = 类名()
2.3 类属性和对象属性
类属性:在类的空间中。可以通过类直接访问(即类名.属性名字)。既可以被类访问,也可以被对象访问(遵循搜索原则)。
对象属性:在对象的空间中,只能被当前的对象访问。
对象的动态赋值。
搜索(访问)对象属性原则:先搜索对象自身,如果没有则去类(模型)中找。
2.4 对象属性的创建
方式一
step 1. 创建对象:对象 = 类名()
step 2. 赋值: 对象.属性名 = 值 (即在空间中增加对象的属性)
方式二
依赖__init__()完成【魔术方法:系统自动触发调用--此时指创建对象时自动触发】
此种方式下创建对象的步骤
step 1.找到指定的类空间;
step 2.按照类模型构建一个对象空间;
step 3.找到魔术方法__init__(self),此时的参数self是第二步创建的对象空间(地址即self表示的是对象本身);
step 4.执行__init__(self)魔术方法,为对象属性动态赋值。
上面是无参的创建对象,在实际应用中不常见。
大多数是有参的。
即魔术方法为__init__(self,参数1, 参数2, 参数3,...)
构建对象的时候,对象名 = 类名(参数值1,参数值2,参数值3,...)
2.5 方法
分为:
普通方法
类方法
静态方法
魔术方法
2.6 普通方法(依赖对象)
定义格式:
def 方法名(self,参数1,参数2,...):
功能代码
调用:
都要依赖对象调用方法
对象名.方法名(参数)
注意:在调用过程中会默认传递参数self对象,slef表示的是对象本身。
方法中访问对象属性:
self.属性名
self.属性名 = 值 ---》改变对象属性的值
方法中访问普通方法(调用兄弟方法)
在类的定义中,如果方法要调用兄弟方法,通过self实现。
self.兄弟方法
2.7 类方法、静态方法
属于工具方法,不依赖对象。
Python 的类方法和静态方法很相似,它们都推荐使用类来调用(其实也可使用对象来调用)。
类方法和静态方法的区别在于,Python会自动绑定类方法的第一个参数,类方法的第一个参数(通常建议参数名为 cls)会自动绑定到类本身;但对于静态方法则不会自动绑定。
使用 @classmethod 修饰的方法就是类方法;使用 @staticmethod 修饰的方法就是静态方法。
类方法中,cls其实就是类对象本身,此时,访问类属性,方式为: cls.属性名。(其实也可以通过 类名.属性名 访问。)使用:类名.方法名() 。
静态方法中,不依赖对象self,也不依赖类cls,此时,访问类属性,方式为: 类名.属性名。使用:类名.方法名() 。
在使用 Python 编程时,一般不需要使用类方法或静态方法,程序完全可以使用函数来代替类方法或静态方法。但是在特殊的场景(比如使用工厂模式)下,类方法或静态方法也是不错的选择。
2.8 子类与父类
继承:子类拥有父类的全部功能;
多态:子类表现出不同于父类的形态;
在子类中重新编写父类函数的行为,叫作重载。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2019-06-12 SQL Server 数据库本地备份文件通过OSS工具上阿里云(恢复还原数据库)