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和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以