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月前
|
Python
python知识点
【8月更文挑战第27天】python知识点
3377 1
WK
|
2月前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
29 0
|
7天前
|
数据采集 数据挖掘 大数据
【Python篇】详细学习 pandas 和 xlrd:从零开始
【Python篇】详细学习 pandas 和 xlrd:从零开始
34 2
|
20天前
|
Python
python之基础知识点
python之基础知识点
24 3
|
5天前
|
设计模式 运维 安全
Python学习—装饰器的力量 (一)
Python学习—装饰器的力量 (一)
12 0
|
5天前
|
Python
Python学习—装饰器的力量 (二)
Python学习—装饰器的力量 (二)
14 0
|
1月前
|
监控 Python Windows
python知识点100篇系列-pysnooper用于调试
PySnooper是一个便捷的Python调试工具,用于监控代码执行过程及局部变量的变化,替代繁琐的打印语句。作为GitHub上的热门开源项目,它通过装饰器自动记录代码执行细节。安装简便,支持多种平台,可通过pip安装。使用时,只需在目标函数上添加装饰器即可实时查看变量变化或将其记录至日志文件。此外,还支持使用with块对特定代码段进行调试。更多详细信息可参阅其官方使用文档。
python知识点100篇系列-pysnooper用于调试
|
2月前
|
存储 Python
Python时间模块四大必备知识点
Python时间模块四大必备知识点
46 4
Python时间模块四大必备知识点
|
2月前
|
Unix 开发者 iOS开发
开发知识点-Python-virtualenv
`virtualenv`通过其简易性、灵活性与高度的可配置性,成为Python开发中推荐的环境隔离工具之一。随着Python生态的发展,类似的工具如 `venv`(Python 3.3+自带的轻量级环境构建工具)和 `pipenv`(提供更复杂的依赖管理功能)也越来越受欢迎,但 `virtualenv`仍保持着重要的地位,尤其是在需要维护旧项目或者系统没有提供最新工具的情况下。
36 1
|
2月前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。