方法 作用於物件 失敗 可迭代物件 迭代器和生成器

2021-10-12 07:56:13 字數 2189 閱讀 5079

python充分利用多核效能的阻礙在於全域性直譯器鎖(gil)

gil確保python程序一次只能執行一條指令,無論當前有多少個核心。

解決方法:標準庫:multiprocessing、numerpr

更快的讀寫速度且在隨機訪問時效能良好

極快的讀寫速度,進入cpu的資料必須進過這裡

迭代器模式(iterator patter): 按需一次獲取乙個資料專案

迭代器用於從集合中取出元素,生成器用於"憑空生成元素"

import re 

import reprlib

re_word = re.compile('w+')

class sentence:

def __init__(self, text):

# 初始化引數

self.text = text

self.words = re_word.findall(text)

def __getitem__(self, index):

# 可通過索引獲取對應的value

return self.words[index]

def __len__(self)

# 句子長度

return len(self.words)

def __repr__(self):

return 'sentence(%s)' % reprlib.repr(self.text)

直譯器需要迭代物件 x 時,會自動呼叫 iter(x)。

檢查物件是否實現了__iter__方法,如果實現了就呼叫它,獲取乙個迭代器

檢查沒有實現__iter__方法,但是實現了__geritem__方法,python會建立乙個迭代器,嘗試按順序(從索引0開始)獲取元素

如果嘗試失敗,python 丟擲 typeerror 異常,通常會提示「c object is not iterable」(c

任何序列都可迭代的原因是,都實現了__getitem__方法,其實,標準的序列也都實現了__iter__方法

鴨子型別:即實現了__iter__方法,還要實現__getitem__方法,且__getitem__方法的引數是從0開始的整數(int),這樣才認為物件是可迭代的。

最準確的方法是:呼叫iter(x)函式,如果不可迭代,在處理typeerror異常,這比isinstance(x, abc.iterable)更準確,因為iter(x)函式會考慮到遺留__getitem__方法,而abc.iterable類則不考慮

使用iter內建函式可以獲取迭代器的物件。

如果物件實現了能返回迭代器的__iter__方法,那物件就是可迭代的.

序列都可以迭代;實現了__getitem__方法,而且其引數是從0開始的索引,這種物件也可以迭代。

s = 'abc'

it = iter(s)

while true:

try:

print(next(it)) # 不斷在迭代器上呼叫next函式,獲取下乙個字元

except stopiteration:

del it # 釋放對it的引用,即廢棄迭代器物件

break

__next__: 返回下乙個可用的元素,如果沒有元素了,丟擲stopiteration異常

__iter__:返回self,以便在應該使用可迭代物件的地方使用迭代器

iterator抽象基類實現__iter__方法的方式是返回例項本身(return self)。這樣,在需要可迭代物件的地方可以使用迭代器。

因為迭代器只需__next__和__iter__兩個方法,所以除了呼叫next()方法,以及捕獲stopiteration異常之外,沒有辦法檢查是否還有遺留的元素,此外,也沒有辦法還原迭代器,如果想再次迭代,那就要呼叫iter(),傳入之前構建迭代器的可迭代物件。

傳入迭代器本身沒用,因為前面說過 iterator.iter方法的實現方式是返回例項本身,所以傳入迭代器無法還原已經耗盡的迭代器。

迭代器是這樣的物件:實現了無引數的next方法,返回序列中的下乙個元素;如 果沒有元素了,那麼丟擲 stopiteration 異常。python 中的迭代器還實現了iter方 法,因此迭代器也可以迭代。

el和jsp內建物件的作用於

page的作用範圍是當前頁面 對應el表示式的pagescope request的作用範圍是頁面與頁面之間的傳遞就是請求請求結束則結束 對應el表示式的requestscope session的作用範圍是直到關閉瀏覽器 對應el表示式的sessionscope 9個內建物件.例如 servletco...

Python高階專題 可迭代物件協議以及迭代器

1.迭代協議與可迭代物件 只有實現了迭代協議 iter 才可以稱為可迭代物件 2.迭代器 訪問集合內元素的方式,用於遍歷資料,但是無法返回,提供了惰性訪問資料,同時實現了 iter 以及 next 協議 from collections.abc import iterable,iterator it...

python迭代和如何判斷乙個物件是可迭代物件

可以理解為,任意的集合使用for迴圈遍歷 python中,迭代永遠是取出元素本身,而非元素的索引。對於有序集合,有時候會需要取出元素的索引,可以使用python內建的enumerate函式。enumerate函式可以把乙個list變成索引 元素對,這樣就可以在for迴圈中同時迭代索引和元素本身。li...