目錄
如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從⽽節省⼤量的空間。在Python中,這種⼀邊循環⼀邊計算的機制,稱爲⽣成器(Generator)。
⽣成器(Generator) ⽣成器會產⽣⼀個對象,⽽不是⼀個列表
1.2⽣成器表達式
⽣成器【Generator】⽣成器會產⽣⼀個可迭代對象,⽽不是⼀個列表。⽣成器表達式很類似列表⽣成式:
(表達式 for var in 可迭代對象)
可以直接作⽤於for-in循環的數據類型都被稱爲可迭代對象(Iterable),可以使⽤isinstance()判斷⼀個對象是否是可迭代對象,可以直接作⽤於for-in循環的數據類型:
數據結構: list、 set、 tuple、 dict、 string
generator【⽣成器】【(),函數結合yield】
迭代器不但可以作⽤於for-in循環,還可以使⽤next()函數將其中的元素獲取出來,當獲取完最後⼀個元素之後,當再次調⽤next⽅法,則會出現StopIteration錯誤,表示⽆法繼續返回⼀個值。可以使⽤isinstance()判斷⼀個對象是否是迭代器。迭代器的類型是Iterator
迭代器⼀定是可迭代對象,但是,可迭代對象不⼀定是迭代器iter():
將可迭代對象轉化爲迭代器【主要針對list、 set、 tuple、 dict、 string】
包是爲了解決模塊重名問題, python引⼊了以⽬錄⽅式組織模塊,稱之爲包(package),⼀個包中可以包含模塊、包。 python的包中必須包含⼀個特殊⽂件,被命名爲__ init__.py,這⽂件告訴解釋器這是⼀個包,⽽⽬錄則不要求⼀定要有,這是⽬錄和包的區別;另外可以使⽤import導⼊包中的模塊,但⽬錄不⾏。
在python中,模塊是代碼組織的⼀種⽅式,把功能相近的函數放到⼀個⽂件中,⼀個⽂件(.py)就是⼀個模塊(module),模塊名就是⽂件名去掉後綴py。這樣做的好處是:
常⽤標準庫:
當導⼊⼀個模塊時,解釋器先在當前包中查找模塊,若找不到,然後在內置的built-in模塊中查找,找不到則按sys.path給定的路徑找對應的模塊⽂件(模塊名.py)
可以使⽤import語句導⼊模塊,格式:
import語句的模塊順序,推薦在⽂件開頭導⼊模塊,建議按照如下順序:
這三類庫中間添加⼀個空⾏,模塊第⼀次被導⼊的時候會被執⾏。如果在導⼊模塊不想執⾏模塊中代碼,可以使⽤ __ name__ 屬性進⾏判斷,如果該模塊是當前模塊,不是導⼊模塊, __name __ 的值是 __main__ 。所以可以這樣檢測: