2016-05-11 64 views
0

itertools.islice的文檔說:itertools islice方法和啓動參數

請返回選自可迭代元素的迭代器。如果start不爲零,則跳過迭代器中的元素直到達到起始點。之後,元素將被連續返回,除非將步驟設置爲高於導致項目被跳過的元素。

用法說:

islice('ABCDEFG', 2) --> A B 
islice('ABCDEFG', 2, 4) --> C D 

應該不是第一個版本返回CDEFG ...跳過前兩個元素是AB

+0

在第一個例子中,2是「stop」參數。看看函數簽名:https://docs.python.org/3/library/itertools.html#itertools.islice – vaultah

回答

2

你誤讀。它有two call profiles

itertools.islice(iterable, stop) 
itertools.islice(iterable, start, stop[, step]) 

如果你只傳遞兩個參數,第二個參數是stop說法,因爲如果你通過0start參數。爲了得到你所期望的行爲,你會怎麼做:

islice('ABCDEFG', 2, None) 

但明白這是低效的大型start值;在引擎蓋下,islice正在迭代並放棄,直到達到期望的start的位置,您還沒有繞過迭代工作(只是在CPython中的C層進行了優化)。

+1

我看到現在新的python。 python很棒,但這些api文檔不如java比較好。不管怎麼說,多謝拉。 –

+1

@BharatJain:真的嗎?它給你兩個可能的呼叫配置文件彼此相鄰,不知道它可以有多大的幫助。 Java允許函數也具有多個原型(並且比Python實現的功能要多得多),所以它不應該是新的。 – ShadowRanger

+0

那麼它更好地爲每個API分別提供文檔,尤其是當它們的含義不同時。你不覺得每個電話配置文件都有相同的詞語會引起混淆,當他們從不明確表示參數被區別對待時 –