Python手冊 5 解析式 生成器 迭代器

2021-10-06 08:58:45 字數 3465 閱讀 1024

3. 生成器

4. 迭代器鏈

迭代器和生成器屬於同一概念,生成器可看作是簡化版的迭代器。

解析式都是語法糖,可以條件規律元素。

舉例:

squares =

[x*x for x in

range(10

)if x %2==

0]squares_set =

squares_dict =

迭代器:

不建議可迭代物件和迭代器實現在乙個類中:

作用:

如果類實現了__iter__方法,則issubclass(foo, abc.iterable)取值為true

repeater = repeater('hello')

for item in repeater:

print(item)

repeater = repeater('hello')

iterator = repeater.__init__()

while true:

item = iterator.__next__()

print(item)

import re

import reprlib

re_word = re.

compile

('\w+'

)class

sentence

:def

__init__

(self, text)

: self.text = text

self.words = re_word.findall(test)

def__repr__

(self)

:return

'sentence(%s)'

% reprlib.

repr

(self.text)

def__iter__

(self)

:return sentenceiterator(self.words)

class

sentenceiterator

:def

__init__

(self, words)

: self.words = words

self.index =

0def

__next__

(self)

:try

: word = self.words[self.index]

except indexerror:

raise stopiteration(

) self.index +=

1return word

def__iter__

(self)

:return self

import re

import reprlib

re_word = re.

compile

('\w+'

)class

sentence

:def

__init__

(self, text)

: self.text = text

self.words = re_word.findall(test)

self.index =

0def

__repr__

(self)

:return

'sentence(%s)'

% reprlib.

repr

(self.text)

def__next__

(self)

:try

: word = self.words[self.index]

except indexerror:

raise stopiteration(

) self.index +=

1return word

def__iter__

(self)

:return self

函式形式的生成器:使用yield替代return

生成器函式的工作原理(以函式形式為例):

特點:惰性實現。盡可能延後生成值,從而節約記憶體,避免無用處理。

yield from:生成器函式需要產生另乙個生成器生成的值,可以通過巢狀for迴圈,也可以使用yield from

舉例:

# 生成器表示式

iterator =

('hello'

for i in

range(3

))# 上述表示式等價於下面**

defbounded_repeater

(value, max_repeats)

:for i in

range

(max_repeats)

:yield value

內建:

舉例:

class

test

:def

__iter__

(self)

:for i in

range(10

):yield i

def

gen_123()

:print

('start'

)yield

1print

('continue'

)yield

2print

('final'

)yield

3

特點:

例項(來自《深入理解python特性》6.7節)

def

integers()

:for i in

range(1

,9):

yield i

defsquared

(seq)

:for i in seq:

yield i * i

defnegated

(seq)

:for i in seq:

yield

-i

chain = negated(squared(integers())

)print

(list

(chain)

)# [-1, -4, -9, -16, -25, -36, -49, -64, -81]

Python 解析式 生成器

datetime模組 datetime物件 datetime物件 日期格式化 import datetime dt datetime.datetime.strptime 21 11 06 16 30 d m y h m print dt.strftime y m d h m s print form...

python高階 解析式 生成器

datetime datetime.datetime.today 返回本地時區當前時間的datetime物件 datetime.datetime.now tz none 返回當前時間的datetime物件,微秒 如果tz為none返回和today 一樣 datetime.datetime.utcno...

Python學習 解析式 生成器

datetime模組,對日期 時間 時間戳的處理 datetime類 類方法 today 返回本地時區當前時間的datetime物件 now tz none 返回當前時間的datetime物件,時間到微秒,如果tz為none,返回 和today 一樣 utcnow 沒有時區的當前時間 fromtim...