網(wǎng)站首頁 編程語言 正文
一、collections集合
collections是Python內(nèi)建的一個集合模塊,提供了許多有用的集合類。
1、namedtuple:命名tuple對象
namedtuple是一個函數(shù),它用來創(chuàng)建一個自定義的tuple對象,并且規(guī)定了tuple元素的個數(shù),并可以用屬性而不是索引來引用tuple的某個元素。
namedtuple('名稱', [屬性list])
這樣一來,我們用namedtuple可以很方便地定義一種數(shù)據(jù)類型,它具備tuple的不變性,又可以根據(jù)屬性來引用,使用十分方便。
我們知道tuple可以表示不變集合,例如,一個點的二維坐標就可以表示成:
p = (1,2)
但是,看到(1, 2),很難看出這個tuple是用來表示一個坐標的。
定義一個class又小題大做了,這時,namedtuple就派上了用場:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
p.x # 1
p.y #2
可以驗證創(chuàng)建的Point對象是tuple的一種子類:
isinstance(p, Point) #True
isinstance(p, tuple) #True
類似的,如果要用坐標和半徑表示一個圓,也可以用namedtuple定義:
Circle = namedtuple('Circle', ['x', 'y', 'r'])
2、deque:雙端隊列
使用list存儲數(shù)據(jù)時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為list是線性存儲,數(shù)據(jù)量大的時候,插入和刪除效率很低。
deque是為了高效實現(xiàn)插入和刪除操作的雙向列表,適合用于隊列和棧:
deque除了實現(xiàn)list的append()和pop()外,還支持appendleft()和popleft(),這樣就可以非常高效地往頭部添加或刪除元素。
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
q
#deque(['y', 'a', 'b', 'c', 'x'])
3、defaultdict:默認字典
使用dict時,如果引用的Key不存在,就會拋出KeyError。如果希望key不存在時,返回一個默認值,就可以用defaultdict。
注意默認值是調(diào)用函數(shù)返回的,而函數(shù)在創(chuàng)建defaultdict對象時傳入。
除了在Key不存在時返回默認值,defaultdict的其他行為跟dict是完全一樣的。
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
#'abc'
dd['key2'] # key2不存在,返回默認值
#'N/A'
4、OrderedDict:順序字典
使用dict時,Key是無序的。在對dict做迭代時,我們無法確定Key的順序。
如果要保持Key的順序,可以用OrderedDict:
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是無序的
#{'a': 1, 'b': 2, 'c': 3}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
#OrderedDict([('a', 1), ('b', 2), ('c', 3)])
注意,OrderedDict的Key會按照插入的順序排列,不是Key本身排序:
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
od.keys() # 按照插入的Key的順序返回
#odict_keys(['z', 'y', 'x'])
OrderedDict可以實現(xiàn)一個FIFO(先進先出)的dict,當容量超出限制時,先刪除最早添加的Key:
from collections import OrderedDict
class LastUpdatedOrderedDict(OrderedDict):
def __init__(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity
def __setitem__(self, key, value):
containsKey = 1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print('remove:', last)
if containsKey:
del self[key]
print('set:', (key, value))
else:
print('add:', (key, value))
OrderedDict.__setitem__(self, key, value)
5、Counter:計數(shù)器
Counter是一個簡單的計數(shù)器.
Counter實際上也是dict的一個子類,下面的結果可以看出,字符'g'、'm'、'r'各出現(xiàn)了兩次,其他字符各出現(xiàn)了一次。
例如,統(tǒng)計字符出現(xiàn)的個數(shù):
from collections import Counter
c = Counter()
for ch in 'programming':
c[ch] = c[ch] + 1
print(c)
#Counter({'p': 1, 'r': 2, 'o': 1, 'g': 2, 'a': 1, 'm': 2, 'i': 1, 'n': 1})
二、typing模塊
1、typing模塊的作用
- 類型檢查,防止運行時出現(xiàn)參數(shù)和返回值類型不符合。
- 作為開發(fā)文檔附加說明,方便使用者調(diào)用時傳入和返回參數(shù)類型。
- 該模塊加入后并不會影響程序的運行,不會報正式的錯誤,只有提醒。
- 注意:typing模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查。
2、使用typing模塊
- 在傳入?yún)?shù)時通過"參數(shù)名:類型"的形式聲明參數(shù)的類型;
- 返回結果通過"-> 結果類型"的形式聲明結果的類型。
在調(diào)用的時候如果參數(shù)的類型不正確pycharm會有提醒,但不會影響程序的運行。
from typing import List, Tuple, Dict
def add(a: int, c: str, d: float, b: bool) -> Tuple[List, Tuple, Dict, bool]:
list1 = list(range(a))
tup = (c, c, c)
d = {"a": d}
bl = b
return list1, tup, d, bl
print(add(5, "hhhh", 2.3, False))
# ([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)
對于如list列表等,還可以規(guī)定得更加具體一些。如:"-> List[str]”,規(guī)定返回的是列表,并且元素是字符串。
from typing import List
def func(a: int, b: str) –> List[int or str] : # 使用or關鍵字表示多種類型
list1 = []
list1.append(a)
list1.append(b)
return list1
4、typing常用類型
- int、long、float: 整型、長整形、浮點型
- bool、str: 布爾型、字符串類型
- List、 Tuple、 Dict、 Set:列表、元組、字典、集合
- Iterable、Iterator:可迭代類型、迭代器類型
- Generator:生成器類型
原文鏈接:https://www.cnblogs.com/springsnow/p/11972985.html
相關推薦
- 2022-11-13 Git實現(xiàn)克隆歷史的某個版本_相關技巧
- 2022-12-03 C++通信新特性協(xié)程詳細介紹_C 語言
- 2022-06-27 C#?使用Log4net添加日志記錄的方法_C#教程
- 2022-05-20 python?特有語法推導式的基本使用_python
- 2022-03-16 Android線程池源碼閱讀記錄介紹_Android
- 2023-01-05 Go單例模式與Once源碼實現(xiàn)_Golang
- 2022-06-01 C語言?詳解如何刪除有序數(shù)組中的重復項_C 語言
- 2022-03-03 Failed to execute ‘drawImage‘ on ‘CanvasRenderingC
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支