帶有 yield 關鍵字的的函式在
python
中被稱之為
generator(
生成器)
。python
直譯器會將帶有
yield
關鍵字的函式視為乙個
generator
來處理。乙個函式或者子程式都只能
return
一次,但是乙個生成器能暫停執行並返回乙個中間的結果 ——
這就是
yield
語句的功能
: 返回乙個中間值給呼叫者並暫停執行。
生成器通過關鍵字 yield 不斷的將迭代器返回到記憶體進行處理,而不會一次性的將物件全部放入記憶體,從而節省記憶體空間。從這點看來生成器和迭代器非常相似,但如果更深入的了解的話,其實兩者仍存在區別。
生成器的另乙個優點就是它不要求你事先準備好整個迭代過程中所有的元素,即無須將物件的所有元素都存入記憶體之後,才開始進行操作。生成器僅在迭代至某個元素時才會將該元素放入記憶體,而在這之前或之後,元素可以不存在或者被銷毀。這個特點使得它特別適合用於遍歷一些巨大的或是無限的類序列物件,eg. 大檔案
/大集合
/大字典
/斐波那契數列等。這個特點被稱為
延遲計算
或惰性求值
(lazy evaluation)
,可以有效的節省記憶體。惰性求值實際上是現實了協同程式
的思想。
綜上所述:使用生成器最好的場景就是當你需要以迭代的方式去穿越乙個巨大的資料集合。比如:乙個巨大的檔案/乙個複雜的資料庫查詢等。
defread_file(fpath):
block_size = 1024
withopen(fpath,'rb')asf:
while true:
block = f.read(block_size)
ifblock:
yieldblock
else:
return
enumerate用於處理可迭代物件,迭代裡面的內容以及下標。預設下標從
0開始,也可以設定起始值。
比如書寫乙個函式,輸出乙個字典的內容和它的下標。
dict1 =
fori, jinenumerate(dict1,10):
print(i,j)
// 10 1
11 2
funcname = sys._getframe().f_code_name
獲取類的名稱,在方法累不使用:
name = self.__class__.__name__
獲取當前命名所在檔案的路徑(路徑包含檔名):
os.path.realpath(__file__)
獲取檔案所在路徑:
filepath = os.path.dirname(os.path.realpath(__file__))
filepath = os.path.realpath(os.path.dirname(__file__))
filepath = os.path.abspath(os.path.dirname(__file__))
這三種方式都可以,realpath和
abspath
用法一樣
filepath = os.getcwd()
比如這些命令都在檔案中: d:\codepractice\selenium\coding\fmproject\testcode
執行呼叫的命令在路徑:c:\windows\system32
curpath5 = r」d:\codepractice\python\practice\practicsys.py」
path1 = os.path.split(curpath5)
path2 = curpath5.split(「practicsys.py」)
path1 = (「d:\codepractice\python\practice」,」practicsys.py」)
path2 = [「d:\codepractice\python\practice」,」」]
在模組裡面,以單下劃線和雙下劃線開頭的函式性質一樣,from module import * 方式無法匯入成功。
import module
然後module._private
和module.__private
都能引用成功;
from module import _private
、from module import __private
也能引用。
在類裡面,單下劃線函式和普通函式函式一樣,可以被引用,被子類繼承。單雙下劃線開頭的函式,不能被引用,不能被子類繼承,只能在類內部使用。
雙下劃線函式能通過
例項名._類名
__方法名 方式在類的外面引用。所以
python
裡面都是偽私有函式。
Python學習筆記(七)
深淺拷貝 set 集合 函式a 1,2 3,4 b a.copy print b 結果 1,2 3,4 b 0 0 8 print a 結果 8,2 3,4 print b 結果 8,2 3,4 原理圖 去重關係測試 定義語法 s set in not in 集合等價與不等價 子集 s set al...
Python學習筆記七
物件導向程式設計 物件導向的特性如下 類 具有相同屬性和方法的一類事物,成為類。物件 類的例項化後的結果,乙個類可以例項化多個物件,每個物件也可以不同的屬性。封裝 在類中對資料的賦值,類裡面包含著類的資料和方法。繼承 乙個類可以派生出子類,在父類定義的屬性方法自動被子類繼承。多型 乙個類可以有多個子...
Python 基礎學習筆記 七
python在設計上堅持了清晰劃一的風格,這使得python成為一門易讀 易維護,並且被大量使用者所歡迎的 用途廣泛的語言。接下來,記錄一些本人自主學習python的一些筆記 比較 相等性和真值 測試值得相等性 is 測試物件的一致性 a 1,1,2,3 b 1,1,2,3 print a b,a ...