亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中的collections集合與typing數(shù)據(jù)類型模塊

 更新時間:2022年05月30日 10:59:29   作者:springsnow  
這篇文章介紹了Python中的collections集合與typing數(shù)據(jù)類型模塊,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、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,當(dāng)容量超出限制時,先刪除最早添加的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的一個子類,下面的結(jié)果可以看出,字符'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ù)的類型;
  • 返回結(jié)果通過"-> 結(jié)果類型"的形式聲明結(jié)果的類型。

在調(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關(guān)鍵字表示多種類型
    list1 = []
    list1.append(a)
    list1.append(b)
    return list1

4、typing常用類型

  • int、long、float: 整型、長整形、浮點型
  • bool、str: 布爾型、字符串類型
  • List、 Tuple、 Dict、 Set:列表、元組、字典、集合
  • Iterable、Iterator:可迭代類型、迭代器類型
  • Generator:生成器類型

到此這篇關(guān)于Python集合collections、數(shù)據(jù)類型typing模塊的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論