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 子类与父类

继承:子类拥有父类的全部功能;
多态:子类表现出不同于父类的形态;
在子类中重新编写父类函数的行为,叫作重载。

 

posted @   东山絮柳仔  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2019-06-12 SQL Server 数据库本地备份文件通过OSS工具上阿里云(恢复还原数据库)
点击右上角即可分享
微信分享提示