DAY21、面向对象
一、内存管理与正则语法
1、内存管理:
引用计数:垃圾回收机制工作原理
引用就 +1 ,释放就 -1 ,当计数为0时,就会被垃圾回收机制回收
标记清除:解决循环导入引用导致的内存泄漏
标记:GC roots 可以直接或间接访问到的数据,都被标记为存活状态
清除:触发标记清除动作后,将所有存活状态的变量复制到新空间,将老空间中的所有值清空
分代回收:提高回收效率的优化策略
分代:将长期存活的变量移至更高代,检查频率降低
回收:回收的依据还是采用引用计数
2、正则:import re
方法:findall | match | split| sub
findall :全文匹配,返回值是列表
res = re,findall('','')
分组:通过分组加(),拿到匹配到的结果中的指定信息
res = re.findall('((\w*?)>)', '<a>abc</a>')
print(res) # [('a>', 'a'), ('a>', 'a')]
操作分组的方法:
(?P<name>...):有名分组
返回值是match匹配的结果对象,可以.group(组序号|组名)来取具体组的信息
res = re.match('(\d{3})(?P<center>\d{3})(\d{3})', '123456789')
print(res.group('center') # center就是组名
compile:传入一个有正则语法的普通字符串,得到一个可以调用正则方法的正则字符串中
r = re.compile('(\w*?)>')
print(r.findall('<a>abc</a>'))
sub:替换
res = re.sub('(\d{3})(?P<center>\d{3})(\d{3})', r'\2\1\3', '<123456789>')
print(res)
二、面向对象
1、面向过程:
重过程:解决问题,考虑的是解决问题的流程
解决问题的思路清晰,但拓展性不强
面向对象:
重对象:解决问题,找到解决问题的对象
解决问题的思路可能不止一条(理解解决问题的难度增加),即编程的复杂度高于面向过程,但扩展性强
重点:面向对象的核心体现是将数据和处理数据的程序封装到对象中
Ptyhon语言:面向对象的语言
Python用面向过程与面向对象两种方式解决问题
函数与方法
函数:通过函数名直接调用
方法:通过附属者.语法来调用
2、名称空间操作:内置 | 全局 | 局部
所有能产生名称空间对应的对象(存放地址的变量)有__dict__值
__dict__指向的就是附属对象的名称空间
def func():
a = 10
print(locals())
pass
func()
print(func.__dict__)
能产生名称空间的有:文件 | 函数 | 类
能产生名称空间的对象有__dict__这个值,通过这个值访问到名字与地址的对应关系
名称空间的使用:
def func():
pass func.__dict__['index'] = 10000
print(func.__dict__)
print(func.__dict__['index'])
print(func.index) func.add = lambda n1, n2: n1 + n2
print(func.__dict__)
print(func.add(10, 20))
3、类与对象
寻求一个类似函数与文件对象,可以额外添加功能与属性的对象
类:具有相同特征与行为个体集合的抽象
对象:有特征、行为的具体个体,就是类的具体体现
语法:
类的声明:class
class 类名: #class定义类语法的关键字
pass
对象的产生:对象的实例化
对象1 = 类名()
对象2 = 类名()
对象3 = 类名()
学习重点:自定义类的实例化对象
class Student:
pass
stu = Student() print(id(Student))
print(id(stu)) print(Student.__dict__)
print(stu.__dict__) stu.__dict__['name'] = 'Bob'
print(stu.name) def fn():
print('学习')
stu.study = fn
stu.study() # 实例化一个Egon同学,有学习功能
# 实例化一个Liu某同学,有学习功能
s1 = Student()
s2 = Student()
print(id(s1), id(s2), id(Student))
s1.name = 'Egon'
s1.study = fn
s2.name = 'Liu某'
s2.study = fn
print(s1.__dict__, s2.__dict__)
print(s1.name, s2.name)
4、小结:
重点:类一旦被加载(随着所属文件的加载就加载),就会进入类的内部执行类中的所有代码
类拥有自己的名称空间,类的对象也有自己的名称空间
可以通过.语法添加或使用属性和方法
属性的访问顺序:优先加载自身的名字,如果没有再考虑类的
DAY21、面向对象的更多相关文章
- day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版
day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...
- python学习day21 面向对象(三)嵌套/特殊方法
1.嵌套 类/方法/对象都可以当做变量或嵌套到其他类型中. 函数的参数可以是任意类型. 可哈希(不可变)数据类型可以做字典的key. 类和对象可以做字典的key. 2.特殊方法(8) __init__ ...
- python全栈开发day21面向对象初识总结
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- 面向对象—多态、鸭子类型(Day21)
编程原则java具有自己的编程原则和设计模式,不能多继承.python的编程原则:1.开放封闭原则:开放是对扩展是开放的,封闭是对修改是封闭的(已经写完的代码程序是不能修改的).2.依赖倒置原则:高层 ...
- day34 反射、面向对象内置方法:如__str__、面向对象的软件开发
Python之路,Day21 = 反射.面向对象内置方法:如__str__.面向对象的软件开发 几个内置查看的方法使用 .__base__ 查看类的继承结构.mro() 对象找属性的顺序存在里面 -- ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
随机推荐
- 【链表问题】打卡9:将单链表的每K个节点之间逆序
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...
- 版本控制工具——Git常用操作(下)
本文由云+社区发表 作者:工程师小熊 摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码.使用分支.出现代码冲突的解决办法.紧急保存现场和恢复现场的操作.学会以后已经 ...
- 简述Servlet的基本概念
Servlet的基本概念 Servlet的概念 http协议作用于客户端-服务端.由客户端发送请求(Request),服务器端接收到数据之后,向客户端发送响应(Response),这就是请求-响应模式 ...
- java的设计模式 - 静态工厂方法
静态工厂方法,也不知道为何叫这个名字.其实也就是一个静态函数,可以替代构造函数用.大名鼎鼎的 guava 就大量使用这种模式,这是非常有用的模式. 比如是 Integer i = Integer.va ...
- Openlayers系列(一)关于地图投影相关错误的解决方案
背景 近期开发以MongoDB为基础的分布式地理数据管理平台系统,被要求做一个简单的demo给客户进行演示.于是笔者便打算向数据库中存储一部分瓦片数据,写一个简单的存取服务器,使用Openlayers ...
- Android 网页打开app(或者打开指定页面)并且接收参数
网页打开app 现实描述场景: 1.短信通知中通知内容,比如信息中一个咨询详情,流程步骤,信息中的地址打开的是一个网页,网页打开就指定app或者app中的指定页面 html代码 <html> ...
- 基于Android的模拟点击探索
前言 压力测试中,一般会用到自动化测试.准备写一个APP,可以记录屏幕上的点击事件,然后通过shell命令来模拟自动执行.shell指令,比较容易实现.那么,关键的一步是获取点击的坐标.对于Andro ...
- webpack4介绍
https://github.com/wallstreetcn/webpack-and-spa-guide
- Swift 产生 uuid
项目中.需要客户端生成一个唯一的识别码 let uuid = UUID().uuidString print(uuid)
- DVWA-命令执行学习笔记
DVWA-命令执行 原理: web服务器没有对用户提交的数据进行严格的过滤,造成调用操作系统的命令或者在操作系统恶意拼接拼接命令,以达到攻击者的目的. 1.将DVWA的级别设置为low 1.2查看源代 ...