Python进阶笔记(一)

本文介绍了Python中几种常用的内置容器类:defaultdict用于简化键不存在时的默认值处理,Counter用于计数,deque实现双端队列,namedtuple提供方便的命名元组,以及enum.Enum用于枚举类型。这些工具在处理数据时具有高效性和易用性。

容器 Collercions

  • defaultdict
  • counter
  • deque
  • namedtuple
  • enum.Enum

defaultdict

dict不同,不需要检查key是否存在

from collections import defaultdict
colours = {
('Yasoob', 'Yellow'),
('Ali', 'Blue'),
}

favourite_colours = defaultdict(list)
for name, colour in colours:
    favourite_colours[name].append(colour)
print(favourite_colours)
print(favourite_colours['Yasoob'])

输出结果

defaultdict(<class 'list'>, {'Yasoob': ['Yellow'], 'Ali': ['Blue']})
['Yellow']

Counter

Counter是一个计数器

from collections import Counter

colours = (
    ('Yasoob', 'Yellow'),
    ('Ali', 'Blue'),
    ('Arham', 'Green'),
    ('Ali', 'Black'),
    ('Yasoob', 'Red'),
    ('Ahmed', 'Silver'),
)

favs = Counter(name for name, colour in colours)
print(favs)
print(favs['Ali'])

输出结果

Counter({'Yasoob': 2, 'Ali': 2, 'Arham': 1, 'Ahmed': 1})
2

deque

deque提供了一个双端队列,你可以从头/尾两端添加或删除元素。要 想使用它,首先我们要从collection中导入deque模块:

from collections import deque
d = deque()

d = deque() 
d.append('1') 
d.append('2') 
d.append('3') 
print(len(d))
print(d[0])
print(d[-1])

输出结果

3
1
3

作用类似于列表

d = deque(range(10))
print(len(d))
#取出左侧第一个元素
print(d.popleft())
#剩余队列
print(d)
#取出右侧第一个元素
print(d.pop())
#打印剩余的队列
print(d)

输出结果

10
0
deque([1, 2, 3, 4, 5, 6, 7, 8, 9])
9
deque([1, 2, 3, 4, 5, 6, 7, 8])

namedtuple

类似于元组,不能改变内部数据。
namedtuples 是什么呢?它把元组变成一个针对简单任务的容 器。你不必使用整数索引来访问一个 namedtuples 的数据。你可以像字典( dict)一样访问 namedtuples ,但 namedtuples 是不可变的。

from collections import namedtuple
#初始化一个animal 的对象,包含name age type 三个属性
animal = namedtuple('animal', 'name age type')
#初始化一个fruit的对象,包含name clour 两个属性
fruit = namedtuple('fruit', 'name clour ')
#定义apple 为fruit ,颜色为 red
apple = fruit(name = 'fruit', clour = 'red')
#定义perry 为animal,name为perry age 为30 type 为 cat
perry = animal(name = 'perry', age = 30, type = 'cat')

print(perry)
print(perry.age)
print(apple)
#转为字典格式
print(apple._asdict())

输出结果

animal(name='perry', age=30, type='cat')
30
fruit(name='fruit', clour='red')
{'name': 'fruit', 'clour': 'red'}

enum.Enum

枚举类型,是一种组织各种东西的方式,枚举可以有多种方式获取值

from collections import namedtuple
from enum import Enum

class Species(Enum):
    cat = 1
    dog = 2
    horse = 3
    aardvark = 4
    butterfly = 5
    owl = 6
    platypus = 7
    dragon = 8
    unicorn = 9
    
    kitten = 1
    puppy = 2
    
Animal = namedtuple('Animal' , 'name age type')
perry = Animal(name = 'Perry', age = 31, type = Species.cat)
drongon = Animal(name = 'Drongon', age = 4, type = Species.dragon)
tom = Animal(name = 'Tom', age = 75, type=Species.cat)
charlie = Animal(name = 'Charlie', age = 2, type = Species.kitten)

print(Species(1))  
print(Species['cat'])
print(Species.cat)

print(perry.age)
print(drongon.type)  

输出结果

Species.cat
Species.cat
Species.cat
31
Species.dragon
### Python 进阶学习笔记总结 Python种功能强大且灵活的语言,其进阶学习涵盖了多个重要主题。以下是基于提供的参考资料整理的 Python 进阶学习笔记的主要内容: #### 、内置常用类型及方法 Python 提供了许多内置的数据类型和方法,这些是日常开发的基础[^1]。了解如何有效使用它们可以显著提高程序效率。 #### 二、常用数据类型 分为两部分介绍: - **上篇**:主要包括列表、字典等基本操作[^2]。 - **下篇**:深入探讨集合和其他复杂结构的操作方式。 #### 三、高效迭代器工具 通过 `itertools` 和其他模块的学习,能够更高效地处理大规模数据集。 #### 四、异步 IO 随着并发需求的增长,理解并应用异步编程模型变得尤为重要。Python 中的 `asyncio` 库提供了强大的支持[^5]。 #### 五、多线程编程 多线程技术允许程序在同时间执行多项任务。虽然 GIL(全局解释锁)限制了些场景下的性能提升,但在 I/O 密集型任务中仍然非常有用[^6]。 #### 六、互联网支持 网络爬虫、HTTP 请求库如 `requests` 的使用技巧以及 RESTful API 设计原则均属于此范畴[^7]。 #### 七、面向对象高级编程 继承、封装、多态之外还有许多特性值得探索,比如描述符(descriptor),元类(metaclass)[^8]。 #### 八、IO 编程 文件读写只是冰山角;缓冲区管理、标准输入输出重定向等内容同样值得关注[^9]。 #### 九、般加密支持 安全始终是个热点话题,在实际项目里经常需要用到哈希算法或者对称/非对称加密方案[^3]。 #### 十、日志支持 良好的日志记录习惯有助于排查问题和维护系统稳定性。 #### 十、数据压缩与归档 当涉及到大数据量传输或存储优化时,掌握 zlib、gzip 等模块就显得格外必要[^12]。 #### 十二、浅拷贝 vs 深拷贝 对于复杂的嵌套结构来说,仅仅复制顶层引用可能不够全面,此时就需要考虑采用深拷贝策略[^4]。 ```python import copy a = [[1, 2], [3, 4]] b = copy.deepcopy(a) # 创建完全独立的新副本 print(b is a) # False 表明两者位于不同位置 ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值