簡單發生器功能我做:我的python生成器函數真的很懶嗎?
def myfunc(text):
for i in text[::-1]:
yield(i)
for i in myfunc("anytext"):
print(i)
將text[::-1]
內發電機的功能將首先評估或將懶洋洋地評估(從發生器函數預期)?
簡單發生器功能我做:我的python生成器函數真的很懶嗎?
def myfunc(text):
for i in text[::-1]:
yield(i)
for i in myfunc("anytext"):
print(i)
將text[::-1]
內發電機的功能將首先評估或將懶洋洋地評估(從發生器函數預期)?
在迭代之前,文本將被反轉。它不能以任何其他方式; for
循環需要反轉文本才能遍歷它。
爲了讓它真的很懶,你需要使用索引。
def myfunc(text):
for i in range(len(text) - 1, -1, -1):
yield text[i]
在Python 2中,代替的range
使用xrange
。
當然,你基本上已經重新實現了內置函數reversed()
。
」它不能是任何其他方式; for循環需要反向文本才能遍歷它。「不幸的措辭?你仍然在使用for循環。 – viraptor
@viraptor'text [:: - 1]'需要被評估,然後根據結果生成一個迭代器,所以在這種情況下,需要生成「反轉文本」循環可以開始(當然,如果'str .__ getitem__'返回一個迭代器會是懶惰的) – donkopotamus
好吧,'text [:: - 1]'*可以*返回一個迭代器而不是一個字符串...所以它可以是另一個辦法;它顯然不是。 – deceze
它將被評估完全一樣,你做任何其他字符串切片:'str [...]'返回一個新的字符串,然後你循環。 「 – deceze