但是需要註意的是,元組解包賦值是壹個原子操作,也就是說,它要麽同時成功,要麽同時失敗,不存在中途出現異常的情況。因此,在下面這個斐波那契數列生成器的例子中,將元組解包賦值拆成兩個賦值語句是不正確的:
def fib():
a0 = 0
a1 = 1
while True:
yield a0
# 錯誤的寫法,會導致生成的數列不正確
a0 = a1
a1 = a0 + a1
這是因為,當執行第二行代碼時,變量 a0 的值已經被更新為 a1 的值了,因此在第三行代碼中計算斐波那契數列的下壹項時,使用的是錯誤的兩個值,導致生成的數列不正確。
正確的寫法是使用元組解包賦值,將兩個變量同時賦值,確保它們的值同時被更新:
def fib():
a0 = 0
a1 = 1
while True:
yield a0
# 正確的寫法,使用元組解包賦值同時更新兩個變量的值
a0, a1 = a1, a0 + a1
這樣,每次循環都會先計算出新的兩個斐波那契數列的值,然後使用元組解包賦值同時更新變量的值,確保計算下壹項時使用的是正確的兩個值,生成的數列就會正確。