Python 編程速查:迅速理解 next() 函數(shù)
Python 的 next()函數(shù)不僅用于迭代器對象,還可處理飛迭代器任務(wù)。它返回可迭代對象的下一個(gè)元素島并將指針移至下一個(gè)元素。這比簡單的循環(huán)更復(fù)雜,但若需要對迭代過程有絕對控制,則非常有用。本文從簡介到深入,幫助你全面理解 next()函數(shù)的使用方法。
迭代器初識
我們都知道用for 循環(huán)和while 循環(huán)進(jìn)行迭代。但你知道 Python 的 next() 函數(shù)嗎?next() 也可用于迭代操作,讓我們一起來探索一下。
# 簡單的 for 循環(huán)進(jìn)行迭代
fruits = ['蘋果', '橙子', '梨']
for fruit in fruits:
print(fruit)
# 蘋果
# 橙子
# 梨
簡介 —— 迭代器對象
fruits = ['蘋果', '橙子', '梨']
iterator = fruits.__iter__()
print(iterator) # <list_iterator object at 0x10adcb160>
若我們調(diào)用某個(gè)可迭代對象(比如列表、字典等)的 .__iter__() 方法,會得到一個(gè)迭代器對象。之后,該迭代器對象將和 next()函數(shù)一起用來迭代處理事物。
print([1, 2, 3].__iter__()) # <list_iterator object at 0x10b1c3010>
print('你好'.__iter__()) # <str_ascii_iterator object at 0x10b1c3010>
print({1: 2, 3: 4}.__iter__()) # <dict_keyiterator object at 0x10b1f7470>
上面演示了多種不同類型的迭代器對象。請注意,他們都可以與 next() 函數(shù)一同工作。
next() 函數(shù)
fruits = ['蘋果', '橙子', '梨']
iterator = fruits.__iter__()
x = next(iterator)
print(x) # 蘋果
當(dāng)在迭代器對象上調(diào)用 next() 函數(shù),它會:
- 返回可迭代對象中的下一個(gè)元素
- 將迭代器的指針移動到下一個(gè)元素
fruits = ['蘋果', '橙子', '梨']
iterator = fruits.__iter__()
print(next(iterator)) # 蘋果
print(next(iterator)) # 橙子
print(next(iterator)) # 梨
每次調(diào)用 next(iterator),就會返回迭代器中的下一個(gè)元素。
fruits = ['蘋果', '橙子', '梨']
iterator = fruits.__iter__()
print(next(iterator)) # 蘋果
print(next(iterator)) # 橙子
print(next(iterator)) # 梨
print(next(iterator))
# Traceback (most recent call last):
# File "/Users/lzl/Documents/repos/main/a.py", line 8, in <module>
# print(next(iterator)) #
# ^^^^^^^^^^^^^^
# StopIteration
當(dāng)我們的迭代器迭代全部元素后,再試圖 next(iterator),就會收到一個(gè) StopIteration 異常。
使用 next() 迭代處理
fruits = ['蘋果', '橙子', '梨']
iterator = fruits.__iter__()
while True:
try:
x = next(iterator)
print(x) # 或者你想做的其他操作
except:
break
由于當(dāng)?shù)竭_(dá)可迭代對象的末尾(實(shí)質(zhì)上是我們的列表末尾)時(shí)會觸發(fā) StopIteration 異常,此時(shí)需要使用 try except塊來捕獲該異常,并跳出 while 循環(huán)。
為什么要這么做呢?
這顯然比簡單的 for 循環(huán)或 while 循環(huán)更麻煩。但是,如果想要對迭代過程有完全的控制,這可能會很有用。
def generate_number():
n = 1
while True:
yield n
n += 1
generator = generate_number()
print(generator)
first = next(generator)
second = next(generator)
third = next(generator)
print(first, second) # 1 2 3
如果我們只想從生成器對象中獲取有限數(shù)量的對象時(shí)——這樣,就不必處理生成前 N 個(gè)元素再使用 break 的邏輯了
結(jié)論
Python 的 next()函數(shù)不僅用于迭代器對象,還可處理飛迭代器任務(wù)。它返回可迭代對象的下一個(gè)元素島并將指針移至下一個(gè)元素。這比簡單的循環(huán)更復(fù)雜,但若需要對迭代過程有絕對控制,則非常有用。本文從簡介到深入,幫助你全面理解 next()函數(shù)的使用方法。