python 功能键ord_Python常忘的进阶知识(下)

2023-10-22 21:10

本文主要是介绍python 功能键ord_Python常忘的进阶知识(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.目录

1.装饰器

1.1 为每个函数都增加一个功能

Unix时间戳(Unix时间戳(英文为Unix time、POSIX time或Unixtimestamp),是一种时间的表示方式): 定义为从1970年01月01日00时00分00秒起至现在的总秒数

1e69f20adfe2e029aa172c2da8d0b754.png

为每一个函数都增加一个打印时间的功能:

9c1d3a314a5ce56bea4c9f4002cfce8f.png 缺点:打印时间这个需求应该属于函数本身,并不是属于新增的函数 这种做法与

print(time.time())

f1()

并没有什么区别

1.2 装饰器只是一种模式

这就是装饰器:

fcfb3d4ee20ee232d96170dfac79fd7a.png 依旧是有缺点的!

1.3 语法糖

使用Python给予的语法糖@:(没有改变原来的调用逻辑!)

27fbdc5ecac4652ea5e5f12e5c6708ec.png

可以接受定义时的复杂,不能接受调用时的复杂! Python中的装饰器体现了AOP的编程思想

1.4 函数需要传递参数,该如何更改装饰器?

使用*args来代表可变参数:

2d932fc3bf78a2ac7d28c2920717d20d.png

1.5 函数需要传递关键字参数,该如何更改装饰器?

使用**kw来代表可变关键字参数:

165cab4dec80aa560934ef1d44dfdd1e.png

ps:猜测kw的意义可能是key word

2.原生爬虫

2.1 爬虫常规思路

爬虫前奏:

明确目的

找到数据对应的网页

分析网页的结构找到数据所在的标签位置

正式编码:

模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML

用正则表达式提取我们要的数据(名字,人气)

此原生爬虫的目的是爬取熊猫直播https://www.panda.tv/cate/lol这个页面的所有主播名称与人气,然后依据人气进行排序

2.2 HTML结构分析基本原则

三个原则:

尽量选取具有唯一标识性的标签作为定位标签

尽量选取最接近要提取的数据的标签

尽量选取可以闭合的标签

采用面向对象的方式编写爬虫:

c2bbb37768902a076729d9d21263861b.png

分析页面获得数据结构: htmls(一组数据):

包含主播姓名和观看人数

主播姓名

观看人数

真实人数

包含主播姓名和观看人数

主播姓名

观看人数

真实人数

包含主播姓名和观看人数

主播姓名

观看人数

真实人数

......

2.3 正则分析HTML

分析每组数据:

442f84077fa6ed925abdebf140647ea1.png

2.4 正则分析获取名字和人数

单项数据匹配规则:

4efb9d474dba50d449ade87411f05d0b.png

输出第一项提取的数据:

dda322fab6cfb84048087e8656ca60a5.png

2.5 数据精炼与排序

数据精炼:

去掉主播名称前后的空格和换行符

把列表转化为单一的字符串的值

将数据进行精炼:(使用字符串.strip()去掉字符串首尾的空格和换行符)

4ade43e589fe38830fdee6e66a6f217e.png

对数据进行排序:

Python内置函数sorted()可以方便排序

reverse=True则为降序排序

设置排序种子__sort_seed()函数

40dc512b542151f4c776225dd6cc7b06.png

2.6 案例总结

修改一下输出格式:

ba38cf214b706a5479567c2fa58fb3d6.png

e2e420dd1f91137700ba14a11a46bb4c.png

最终不太面向对象的代码:

b7817524c2da0f9ef5a17c99a5635b42.png

103157adf924162246bd9d23034b617c.png

fcca2536d6d2a6b726f58c5a837134f9.png

3.补充知识点

3.1 用字典映射代替switch case语句

C++中的switch case

404ab555dfe9968dbc6929e17c7d1b13.png

Python使用字典:

640e43909e3b83bb156d4856c9e33e8d.png defalut功能没有解决!

不使用下标来取值:

0d89c52af98ab5090dbcad85772af1b9.png 返回值改为返回函数:

23a0d943710f68f052b5bc9bf7cfd280.png

3.2 列表推导式

求平方、求立方:

b3a791fd0bfa86cf7a5e7dacb6d810f1.png

e40b5ab826b90aea791e5595bb3f8f58.png

只对列表中部分元素进行操作:

db6895ef758e620a20e10c428213b83f.png

集合(set)也可以被推导:

446414924e3f1b5062893dd9745ffd41.png ps:字典(dict)和元组(tuple)也可以被推导

3.3 字典如何编写列表推导式

将key和value颠倒顺序:

311b7a57315ceac8c3c49ef41302ee09.png

元组是不可变的:

53fc1eee1a317714e81e044b1d6c6c43.png

3.4 迭代器(iterator)

可迭代对象(iterable)——凡是可以被for...in...循环遍历的数据结构都是可迭代对象,比如列表、元组、集合

迭代器(iterator)

迭代器是一个对象(class)

迭代器可以被遍历,普通对象不可以被遍历

如何让普通对象变成迭代器? 只需实现两个函数——def __iter__(self): 和 def __next__(self):

for...in...循环的实质在于会不断地去调用迭代器里面的__next__()方法:

29ee1652cd168898482e4cd86d4e6b6d.png

也可以不用for...in...循环遍历:

f63dfc8f8ae2097b10ac7c891c2df059.png

迭代器具有一次性,第一次已经用完了,第二次就不会输出任何值! 列表、元组、集合无论遍历多少次都会输出相同的结果!

如何遍历多次迭代器? 1.再次实例化一个对象

087098601fa0794c146a25104d343d15.png 2.拷贝对象

1bbb90ee86dd99aaffe23ae67c052ebc.png ps:copy.copy()实现的是浅拷贝 pps:copy.deepcopy()实现的是深拷贝

3.5 生成器(generator)

生成器是对于函数来说的 输出0~10000:

d6f95eb1ab796b462e02d8a72bbdd5b9.png 缺点:非常消耗内存,因为n是列表,有10001个数,都存在内存中

如何输出0~10000,同时又不需要把0~10000所有的数字都存储在计算机中?

2cbe17caad720d121bc6d009cd1cc20c.png 优点:解决了性能问题 只是一个普通的函数,并不是生成器 缺点:实现的目的太过于特殊了,直接在函数内部输出了数字,假如最终目的不是输出数字,而是得到数字用来做别的事情...... 在函数外部调用函数真实的目的应该是函数返回0~10000个数字,但是我怎么用,函数应该不要管,更不应该在函数内部输出数字

将return改为yield后,就会返回一个生成器:

6b6ed4efeac0336061e95065a9bee828.png

600dc62d13770a06a49cca6ee45f25bc.png

如何使用生成器: 1.使用next()函数

c22591157f7384a2b7ccc795d567fe6b.png 2.使用for...in...循环遍历

d9c41a4607af36c5341b304ec608f9cb.png

生成器的优势

既保证了函数的通用性,又解决了性能问题

生成器内部根本就没有保存任何的数据,实质是保存了一个算法

通过算法不断地生成新的数字

列表推导式也可以得到生成器(把中括号改成小括号):

bd7a01c6deeebeac7fe3fd14f0d771b4.png

3.6 对象存在并不一定是True

对象存在:

0e0f29ead9533e77faa5fedfedaefdc0.png

将对象长度置为0:

fbe4f0b2ef2fb52900bd28c20f42821e.png

对象的真假由两个内置方法决定——__len__与__bool__内置方法! 1.不定义__len__()方法与__bool__()方法时默认为True

6803d339e9f7e0ff09a4d38bd7189644.png 2.定义__len__()方法时——__len__()方法必须返回大于等于0的整数或者True或者False

794e291629d04ce7a10b09b521d91140.png ps:当使用 bool() 方法或者 len() 方法时会调用__len__()方法 3.定义__bool__()方法时——__bool__()方法必须返回True或者False,不能返回0或者1

5466c70ee76c9cd01d7862526e2b474e.png 4.定义了__bool__()方法后,取bool(对象)的值不会再调用__len__()方法

06d0561f3c1cfb3bd0d26929a596cb80.png

3.7 装饰器的副作用

加了装饰器后,函数f1的名称变为wrapper了:

cbe08d77639c85679770602f2f2642b5.png

加了装饰器后查找不到帮助文档了:

bdecdf4afa96a5795b6ac7fba1ebc6bb.png

Python提供了另一个装饰器来解决这个函数名称会被改变的问题:

efb47aebd3e4db128ae2e54b58fe2f39.png

这篇关于python 功能键ord_Python常忘的进阶知识(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/263591

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一