1. 程式人生 > >Python 知識點記錄——高階特性

Python 知識點記錄——高階特性

用於記錄知識點,有錯誤歡迎指正

列表生成式:

用於建立list

[x * x for x in range(1, 11)]
[x * x for x in range(1, 11) if x % 2 == 0]
[{m: n} for m in 'ABC' for n in 'XYZ']

生成器:

返回的可迭代物件

1、列表生成式[]換成()

L = [x * x for x in range(1, 11)]

g = (x * x for x in range(1, 11))  # 生成器:可迭代物件,每次執行獲取下一個返回值,for迴圈

2、生成器函式

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

遇到yield語句返回值一個,再次執行時,從上次返回的yield語句處繼續執行, for迴圈

for i in fib(6)

迭代器:

可以直接作用於for迴圈的物件統稱為可迭代物件

可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器

生成器都是迭代器物件,但list、dict、str是可迭代物件,確不是迭代器。(為什麼?迭代器物件是一個數據流,可以被next()函式不斷的返回下一個資料,直到沒有資料丟擲錯誤。可以看作是有序的序列,但不知道序列長度。迭代器物件是惰性的,只有在需要返回下一個資料時它才會計算。而list永遠不可能是無限的。不對請指出:惰性計算的序列都是迭代器

可迭代物件可以通過 iter() 函式獲得一個迭代器物件