Python高级知识点学习(四)

简介: 序列类型Python中的序列类型,序列类型可以使用for循环遍历。序列类,序列是python中非常重要的协议,如何通过实现这个协议,将类变为序列类。Python中的序列分类两个维度区分:容器序列:可以放置任意类型的数据。

序列类型

Python中的序列类型,序列类型可以使用for循环遍历。

序列类,序列是python中非常重要的协议,如何通过实现这个协议,将类变为序列类。

Python中的序列分类两个维度区分:

  • 容器序列:可以放置任意类型的数据。
  • 可变序列、不可变序列。

序列类型的一些协议

from collections import abc
跟容器相关的数据结构的抽象基类都是放到abc里的,可以查看源码看下继承关系:

img_1e3e333170a4420d30e8fb74b501136d.png
image.png

img_d5d344f82f671d1cf777e41ca4045413.png
image.png

list中的extend方法、+、 +=、以及append区别:

a = [1, 2]
# 新对象上+ [3, 4]
c = a + [3, 4]

#就地加, 还是a对象上边操作
a += (3, 4)

a.extend(range(3))

a.append((1, 2))
print(a)

打印结果:
[1, 2, 3, 4, 0, 1, 2, (1, 2)]

可切片对象

列表的切片:模式[start:end:step]
start:从哪开始
end:从哪结束
step:步长

例如:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a[::]

  • 切片操作返回的是一个新的列表,不会改变原列表。

实现可切片对象,最关键的是要实现一个魔法函数:__getitem__

什么时候不使用列表List

某些情况最好选择Python中其他内置的数据结构:array和deque。

array 和 List 重要区别:

  • array只能存放指定的数据类型,List不同
  • array性能比List高

列表推导式、生成器表达式、字典推导式

列表推导式:又名列表生成式,通过一行代码来生成列表。

列表生成式性能高于列表操作,
第一:能用尽量用, 因为效率高
第二:如果逻辑过于复杂,建议不要使用,会失去高可读性

生成器表达式:改为小括号即可:
(i for i in range(21) if i % 2 == 1)
转换为lsit ,list((i for i in range(21) if i % 2 == 1))

字典推导式:
一行代码生成 dict。

dict的abc继承关系

from collections.abc import Mapping, MutableMapping

dict属于 mapping 类型

from collections.abc import Mapping, MutableMapping
# dict属于 mapping 类型

a = {}

print(type(a))
print(isinstance(a, MutableMapping))

打印结果:
<class 'dict'>
True

上边代码中,a 并不是继承了MutableMapping,只是实现了MutableMapping中的一些魔法函数。

dict常用方法:

  • clear方法:清空dict
  • copy方法:返回浅拷贝

浅拷贝的时候会互相影响:

one = {
     "a": {"name": "zhao"},
     "b": {"age": "20"}
}

two = one.copy()

two['a']['name'] = 'wang'

print(two)
print(one)

打印结果:
{'a': {'name': 'wang'}, 'b': {'age': '20'}}
{'a': {'name': 'wang'}, 'b': {'age': '20'}}

深拷贝:

import copy
one = {
     "a": {"name": "zhao"},
     "b": {"age": "20"}
}

two = copy.deepcopy(one)

two['a']['name'] = 'wang'

print(two)
print(one)
打印结果:
{'a': {'name': 'wang'}, 'b': {'age': '20'}}
{'a': {'name': 'zhao'}, 'b': {'age': '20'}}
  • fromkeys方法:快速生成以list元素为key的dict,fromkeys参数接受可迭代对象。
new_list = ["a", "b"]

new_dict = dict.fromkeys(new_list, {"age": "18"})

运行结果:
{'a': {'age': '18'}, 'b': {'age': '18'}}
  • get方法:
new_dict = {"a": "a", "b": "b"}
print(new_dict.get('c', 'c'))

打印结果:
c
  • setdefault方法:去dict中取值,如果没有值,则设置完默认值后再取值,如果有值,则只取值。
# dict没有值:
a = {"a": "a", "b": "b"}
b = a.setdefault("c", "c")
print(b)
print(a)

打印结果:
c
{'a': 'a', 'b': 'b', 'c': 'c'}
# dict有值
a = {"a": "a", "b": "b", "c": "2"}
b = a.setdefault("c", "c")
print(b)
print(a)
打印结果:
2
{'a': 'a', 'b': 'b', 'c': '2'}
  • update方法:合并两个dict
img_a2af7ccb93ec0a5541bb653791d21688.jpe
qrcode_for_gh_60369a20e6f5_258.jpg

可以关注我的微信公众号,会更新Python知识点,也会有其他语言和软件开发中的各种坑,都会记录在公众号。

目录
相关文章
|
2月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
286 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
2月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
|
28天前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
25 1
[Python]知识点
|
2月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
2月前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
2月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
2月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
2月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。