python學習筆記(七)

2022-07-29 00:21:22 字數 2613 閱讀 6488

帶有 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 ...