最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、collections集合

collections是Python內(nèi)建的一個(gè)集合模塊,提供了許多有用的集合類。

1、namedtuple:命名tuple對(duì)象

namedtuple是一個(gè)函數(shù),它用來(lái)創(chuàng)建一個(gè)自定義的tuple對(duì)象,并且規(guī)定了tuple元素的個(gè)數(shù),并可以用屬性而不是索引來(lái)引用tuple的某個(gè)元素。

namedtuple('名稱', [屬性list])

這樣一來(lái),我們用namedtuple可以很方便地定義一種數(shù)據(jù)類型,它具備tuple的不變性,又可以根據(jù)屬性來(lái)引用,使用十分方便。

我們知道tuple可以表示不變集合,例如,一個(gè)點(diǎn)的二維坐標(biāo)就可以表示成:

p = (1,2)

但是,看到(1, 2),很難看出這個(gè)tuple是用來(lái)表示一個(gè)坐標(biāo)的。

定義一個(gè)class又小題大做了,這時(shí),namedtuple就派上了用場(chǎng):

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
p.x # 1
p.y #2

可以驗(yàn)證創(chuàng)建的Point對(duì)象是tuple的一種子類:

isinstance(p, Point) #True
isinstance(p, tuple) #True

類似的,如果要用坐標(biāo)和半徑表示一個(gè)圓,也可以用namedtuple定義:

Circle = namedtuple('Circle', ['x', 'y', 'r'])

2、deque:雙端隊(duì)列

使用list存儲(chǔ)數(shù)據(jù)時(shí),按索引訪問(wèn)元素很快,但是插入和刪除元素就很慢了,因?yàn)閘ist是線性存儲(chǔ),數(shù)據(jù)量大的時(shí)候,插入和刪除效率很低。

deque是為了高效實(shí)現(xiàn)插入和刪除操作的雙向列表,適合用于隊(duì)列和棧:

deque除了實(shí)現(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:默認(rèn)字典

使用dict時(shí),如果引用的Key不存在,就會(huì)拋出KeyError。如果希望key不存在時(shí),返回一個(gè)默認(rèn)值,就可以用defaultdict。

注意默認(rèn)值是調(diào)用函數(shù)返回的,而函數(shù)在創(chuàng)建defaultdict對(duì)象時(shí)傳入。

除了在Key不存在時(shí)返回默認(rèn)值,defaultdict的其他行為跟dict是完全一樣的。

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
#'abc'
dd['key2'] # key2不存在,返回默認(rèn)值
#'N/A'

4、OrderedDict:順序字典

使用dict時(shí),Key是無(wú)序的。在對(duì)dict做迭代時(shí),我們無(wú)法確定Key的順序。

如果要保持Key的順序,可以用OrderedDict:

from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是無(wú)序的
#{'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會(huì)按照插入的順序排列,不是Key本身排序:

od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
od.keys() # 按照插入的Key的順序返回
#odict_keys(['z', 'y', 'x'])

OrderedDict可以實(shí)現(xiàn)一個(gè)FIFO(先進(jìn)先出)的dict,當(dāng)容量超出限制時(shí),先刪除最早添加的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:計(jì)數(shù)器

Counter是一個(gè)簡(jiǎn)單的計(jì)數(shù)器.

Counter實(shí)際上也是dict的一個(gè)子類,下面的結(jié)果可以看出,字符'g'、'm'、'r'各出現(xiàn)了兩次,其他字符各出現(xiàn)了一次。

例如,統(tǒng)計(jì)字符出現(xiàn)的個(gè)數(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模塊的作用

  • 類型檢查,防止運(yùn)行時(shí)出現(xiàn)參數(shù)和返回值類型不符合。
  • 作為開發(fā)文檔附加說(shuō)明,方便使用者調(diào)用時(shí)傳入和返回參數(shù)類型。
  • 該模塊加入后并不會(huì)影響程序的運(yùn)行,不會(huì)報(bào)正式的錯(cuò)誤,只有提醒。
  • 注意:typing模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查。

2、使用typing模塊

  • 在傳入?yún)?shù)時(shí)通過(guò)"參數(shù)名:類型"的形式聲明參數(shù)的類型;
  • 返回結(jié)果通過(guò)"-> 結(jié)果類型"的形式聲明結(jié)果的類型。

在調(diào)用的時(shí)候如果參數(shù)的類型不正確pycharm會(huì)有提醒,但不會(huì)影響程序的運(yùn)行。

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)

對(duì)于如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: 整型、長(zhǎng)整形、浮點(diǎn)型
  • bool、str: 布爾型、字符串類型
  • List、 Tuple、 Dict、 Set:列表、元組、字典、集合
  • Iterable、Iterator:可迭代類型、迭代器類型
  • Generator:生成器類型

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

相關(guān)文章

  • python中創(chuàng)建以及刪除虛擬環(huán)境的幾種方法總結(jié)

    python中創(chuàng)建以及刪除虛擬環(huán)境的幾種方法總結(jié)

    在Python?中創(chuàng)建虛擬環(huán)境非常容易,但是刪除虛擬環(huán)境可能會(huì)有一些挑戰(zhàn),這篇文章主要給大家介紹了關(guān)于python中創(chuàng)建以及刪除虛擬環(huán)境的幾種方法,需要的朋友可以參考下
    2024-03-03
  • python實(shí)現(xiàn)linux下抓包并存庫(kù)功能

    python實(shí)現(xiàn)linux下抓包并存庫(kù)功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)linux下抓包并存庫(kù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python中的列表和元組實(shí)例詳解

    python中的列表和元組實(shí)例詳解

    在Python中序列是最基本的數(shù)據(jù)結(jié)構(gòu),它是一塊用于存放多個(gè)值得連續(xù)內(nèi)存空間,Python中內(nèi)置了5個(gè)常用的序列結(jié)構(gòu),分別是列表、元組、集合、字典和字符串,本文將詳細(xì)講解python中的列表和元組,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python使用flask-caching緩存數(shù)據(jù)的示例代碼

    Python使用flask-caching緩存數(shù)據(jù)的示例代碼

    Flask-Caching 是 Flask 的一個(gè)擴(kuò)展,為任何 Flask 應(yīng)用程序添加了對(duì)各種后端的緩存支持,它基于 cachelib 運(yùn)行,并通過(guò)統(tǒng)一的 API 支持 werkzeug 的所有原始緩存后端,本文給大家介紹了Python使用flask-caching緩存數(shù)據(jù),需要的朋友可以參考下
    2024-12-12
  • 樹莓派上利用python+opencv+dlib實(shí)現(xiàn)嘴唇檢測(cè)的實(shí)現(xiàn)

    樹莓派上利用python+opencv+dlib實(shí)現(xiàn)嘴唇檢測(cè)的實(shí)現(xiàn)

    本文主要介紹了樹莓派上利用python+opencv+dlib實(shí)現(xiàn)嘴唇檢測(cè)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • python通過(guò)第三方庫(kù)操作PDF文件的幾種常見(jiàn)方法

    python通過(guò)第三方庫(kù)操作PDF文件的幾種常見(jiàn)方法

    Python是一種高級(jí)編程語(yǔ)言,主要用于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、圖像處理等領(lǐng)域,在PDF文件處理方面,Python有許多強(qiáng)大的庫(kù)和工具,這篇文章主要給大家介紹了關(guān)于python通過(guò)第三方庫(kù)操作PDF文件的幾種常見(jiàn)方法,需要的朋友可以參考下
    2024-02-02
  • 詳解python基礎(chǔ)中的for循環(huán)

    詳解python基礎(chǔ)中的for循環(huán)

    這篇文章主要為大家介紹了python的for循環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • python 使用csv模塊讀寫csv格式文件的示例

    python 使用csv模塊讀寫csv格式文件的示例

    這篇文章主要介紹了python 使用csv模塊讀寫csv格式文件的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • python模擬表單提交登錄圖書館

    python模擬表單提交登錄圖書館

    這篇文章主要為大家詳細(xì)介紹了python模擬表單提交登錄圖書館的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python學(xué)習(xí)之路之pycharm的第一個(gè)項(xiàng)目搭建過(guò)程

    Python學(xué)習(xí)之路之pycharm的第一個(gè)項(xiàng)目搭建過(guò)程

    這篇文章主要介紹了Python學(xué)習(xí)之路之pycharm的第一個(gè)項(xiàng)目搭建過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論

望谟县| 长武县| 宜春市| 泸定县| 鲁山县| 镶黄旗| 米林县| 东平县| 任丘市| 寿宁县| 迭部县| 陈巴尔虎旗| 吴桥县| 青州市| 巴南区| 社会| 桦南县| 原阳县| 青岛市| 个旧市| 怀宁县| 郯城县| 石台县| 芮城县| 乐东| 都江堰市| 五台县| 工布江达县| 恭城| 龙口市| 安新县| 四川省| 新巴尔虎右旗| 武鸣县| 盱眙县| 汨罗市| 勃利县| 永川市| 积石山| 拜泉县| 通许县|