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 Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)