包和模塊_月隱學python第13課

目錄

 

1.⽣成器

1.1 yield表達式​

2.迭代器​

2.1 迭代對象

2.2 迭代器

2.3 將迭代對象轉換爲迭代器

3. 包

4.模塊

4.1 模塊搜索路徑

4.2 導⼊模塊


1.⽣成器


如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從⽽節省⼤量的空間。在Python中,這種⼀邊循環⼀邊計算的機制,稱爲⽣成器(Generator)。

  • 延遲計算、惰性求值
  • 節省內存,⾼效
  • 缺點:⽆法隨機存取

⽣成器(Generator) ⽣成器會產⽣⼀個對象,⽽不是⼀個列表

1.1 yield表達式

1.2⽣成器表達式
⽣成器【Generator】⽣成器會產⽣⼀個可迭代對象,⽽不是⼀個列表。⽣成器表達式很類似列表⽣成式:
(表達式 for var in 可迭代對象)

2.迭代器

2.1 迭代對象


可以直接作⽤於for-in循環的數據類型都被稱爲可迭代對象(Iterable),可以使⽤isinstance()判斷⼀個對象是否是可迭代對象,可以直接作⽤於for-in循環的數據類型:
數據結構: list、 set、 tuple、 dict、 string
generator【⽣成器】【(),函數結合yield】

2.2 迭代器


迭代器不但可以作⽤於for-in循環,還可以使⽤next()函數將其中的元素獲取出來,當獲取完最後⼀個元素之後,當再次調⽤next⽅法,則會出現StopIteration錯誤,表示⽆法繼續返回⼀個值。可以使⽤isinstance()判斷⼀個對象是否是迭代器。迭代器的類型是Iterator

2.3 將迭代對象轉換爲迭代器


迭代器⼀定是可迭代對象,但是,可迭代對象不⼀定是迭代器iter():

將可迭代對象轉化爲迭代器【主要針對list、 set、 tuple、 dict、 string】

3. 包


包是爲了解決模塊重名問題, python引⼊了以⽬錄⽅式組織模塊,稱之爲包(package),⼀個包中可以包含模塊、包。 python的包中必須包含⼀個特殊⽂件,被命名爲__ init__.py,這⽂件告訴解釋器這是⼀個包,⽽⽬錄則不要求⼀定要有,這是⽬錄和包的區別;另外可以使⽤import導⼊包中的模塊,但⽬錄不⾏。


4.模塊


在python中,模塊是代碼組織的⼀種⽅式,把功能相近的函數放到⼀個⽂件中,⼀個⽂件(.py)就是⼀個模塊(module),模塊名就是⽂件名去掉後綴py。這樣做的好處是:

  • 提⾼代碼的可復⽤、可維護性。⼀個模塊編寫完畢後,可以很⽅便的在其他項⽬中導⼊
  • 解決了命名衝突,不同模塊中相同的命名不會衝突

常⽤標準庫:

4.1 模塊搜索路徑


當導⼊⼀個模塊時,解釋器先在當前包中查找模塊,若找不到,然後在內置的built-in模塊中查找,找不到則按sys.path給定的路徑找對應的模塊⽂件(模塊名.py)

4.2 導⼊模塊


可以使⽤import語句導⼊模塊,格式:

import語句的模塊順序,推薦在⽂件開頭導⼊模塊,建議按照如下順序:

  • python標準庫
  • 第三⽅庫
  • ⾃定義庫

這三類庫中間添加⼀個空⾏,模塊第⼀次被導⼊的時候會被執⾏。如果在導⼊模塊不想執⾏模塊中代碼,可以使⽤ __ name__ 屬性進⾏判斷,如果該模塊是當前模塊,不是導⼊模塊, __name __ 的值是 __main__ 。所以可以這樣檢測: