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...