xml 模块
xml 介绍:
--xml 全称 可扩展标记语言
--<tag></tag> 双标签 标签中间可以加入文本信息
- --<tag/> 单标签 没有文本 , 一般用于设计文档结构, 例如换行 <tr/>
- <tag style="color:red" age="18">123sddds</tag>
-- 一个完整的标签有三部分组成
--tag --> 标签名称 tag
--123sddds --> 文本内容 text
--age = '18' --> 是标签的属性
xml 的其他规范
--1, 有开始就必须有结束
--2, 所有的属性值必须包含在双引号里
--3, 只能由一个根标签 (最外层只能有一个标签)
--4, 开始标签和结束标签的顺序是相反的, 最先打开谁, 就最后关闭谁
-- 文档开头可以写上那个文档声明, 告诉浏览器该怎么解析该文件 (可写可不写)
与 JSON 的区别
--1,xml 是以重可扩展的标记语言 (内容形式比 JSON 灵活)
--2, 可以高度自定义文档的结构, 数据类型, 标签含义等等
JSON 更加适用于前后台数据交换. 优点 --> 轻量级, 跨平台, 语法简单
xml 更多用来作为配置文件 当然 python 不常用, python 有更为简单的 configparser 模块来解析配置文件
xml 的使用方法
- #1, 导入模块, 可以起别名
- import xml.etree.ElementTree as ET
- #2, 获得元素树
tree = ET.parse('文件名') --> 括号里文件在当前目录下直接文件名, 不在的话就用绝对路径
- #3, 获得根标签
- root = tree.getroot()
- #4, 查找标签下的子标签 --> 按标签名称查找
--1,find() 遍历所有的子标签, 返回第一个查找到的标签, 没有查找到就返回 None
--2,findall() 遍历所有的子标签, 返回第所有查找到的标签, 没有查找到返回一个空列表
--3,iter() 查找根标签下的所有标签, 返回所有查到的标签,
如果是空括号, 就会把所有的标签列出来
--4, 直接遍历某个标签获得的时这个标签下的所有子标签
--5,root.tag 获取的是标签的标签名
--6,root.text 获取的是标签的文本内容
--7,root.attrib 获取的是标签的属性, 返回的是一个字典
- #5, 增加子标签
- root.append(标签对象)
--new = ET.Element('标签名') --> 创建一个标签对象
--new.txt = 'ss' --> 为标签添加文本信息, 如果不添加, 标签就会以单标签的形式被存进去
--new.set('ddd','fff') --> 为标签添加属性
最后将标签对象添加在 root 标签下
#6, 删除子标签
root.remove(标签对象) --> 注意: 括号里是标签对象而不是标签名称
需要注意的是标签它本身没有办法删除自己, 所以只能找到它的父级标签
通过它父级标签的 remove() 来把他删除
#7, 改标签对象里面的内容
--root.tag = '标签名称' --> 不常用, 标签名称基本不用改
--root.text = '文本信息' --> 修改标签的内容信息
--root.set('name','gdk') --> 修改标签的属性, 属性名存在就修改, 不存在新添加
面向对象
面向过程
面向过程的程序设计: 核心是过程, 过程指的是分步骤解决问题, 是一种机械的思维方式
优点: 复杂的问题流程化, 进而简单化
可以提前预知程序运行结果
缺点: 一套流水线或流程解决一个问题, 一旦确定好流水之后, 再想拓展新功能就比较麻烦
经常是牵一发而动全身, 维护性差
应用场景: 一旦完成基本很少改变的场景, 例如电脑上的计算器功能或者是 Linux 的内核等等
面向对象
面向对象编程 -->Object Oriented Programming, 简称 OOP, 是一种程序设计思想
它是将对象作为程序的基本单元
将数据和处理数据的程序封装到对象中, 让对象完成特定的功能
以提高软件的复用性, 灵活性和拓展性为主要目的
优点: 程序员的角色发生了改变, 操作者编程了指挥者, 不再需要关心每个功能具体的执行细节, 从而可以更多的专注逻辑
大大提高了程序的拓展性, 一个对象发生改变, 对其他对象没有影响, 对象之间互相独立
提高了程序的灵活性, 复用性强
缺点:
需要提前设计程序, 简单的问题会变得复杂
无法提前预知程序运行结果
类和对象
对象: 特征与技能的结合体
类: 就是种类, 是一系列对象中相似特征和技能的结合体
定义类
在 python 中, 通过 class 关键字来定义类
class Student: -->class 后面跟着的 Student 就是类的名字, 类名用大驼峰的命名规范来命名
gender = 'male' --> 特征在类中基本用常量来表示
def sleep(self): --> 技能在类中基本上用函数表示
- pass
- ## 类在定义时, 类的内部代码就会运行一遍, 且仅在第一次加载的时候运行一遍, 后续调用不会执行
- ## 第一次执行的时候会产生一个名称空间
创建对象 --> 会把类的名称空间拿过来
创建对象也称之为实例化, 定义好 Student 类后, 就可以根据 Student 类创建出 Student 的实例
创建实例通过类名加上 () 实现
stu1 = Student() -->stu1 就是对象, 每个对象的内存都是独立的
对象的属性操作
对象是特征与技能的结合体
通过. 语法可以为对象添加特征 stu1.name = 'dog', 同样也可以通过. 语法来获取对象的特征 print(stu1.name) ->dog
每个对象都会存储自己所在类的地址, 可以使用__class__来访问
print(stu1.__class__) type 底层用的就是__class__方法
查看名称空间的内容通过__dict__方法
# 给 stu1 添加的属性是 stu1 独有的, 在访问时优先访问自己名称空间, 如果找不到再去访问类的名称空间
来源: http://www.bubuko.com/infodetail-3060363.html