日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...

發布時間:2025/3/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、可迭代對象、迭代器對象和生成器

像list, tuple等這些序列是可以使用for...in ...語句來進行遍歷輸出的。這是為什么呢?這就需要知道可迭代對象(Iterable)、迭代器對象(Iterator)和生成器對象(Generator)了。

1.什么可迭代對象?

把可以通過for...in...這類語句迭代讀取一條數據供我們使用的對象。

2. 可迭代對象的本質?

可迭代對象通過__iter__方法向我們提供一個迭代器,我們在迭代一個可迭代對象的時候,實際上就是先獲取該對象提供的一個迭代器,然后通過這個迭代器來依次獲取對象中的每一個數據。

也就是說可迭代對象必須要有__iter__()方法

3.iter()函數與next()函數的作用是什么?

通過iter()函數獲取可迭代對象的迭代器。

然后我們可以對獲取到的迭代器不斷使用next()函數來獲取下一條數據。當我們已經迭代完最后一個數據之后,再次調用next()函數會拋出StopIteration異常,

來告訴我們所有數據都已迭代完成,不用再執行next()函數了。

4.什么是迭代器對象?

一個實現了__iter__方法和__next__方法的對象,就是迭代器。

5. 什么是生成器?

簡單來說:只要在def中有yield關鍵字的 就稱為生成器

6.yield的作用是什么?

yield關鍵字有兩點作用:

(1).保存當前運行狀態(斷點),然后暫停執行,即將生成器(函數)掛起

(2).將yield關鍵字后面表達式的值作為返回值返回,此時可以理解為起到了return的作用

Python2中的原生協程就是使用yield關鍵字,但在Python3中是使用了yield from。

7.如果啟動生成器?

send():除了能喚醒生成器外,還可以給生成器傳遞值;

next():單純的獲取生成器中的一個值。

機器代碼語言鍵盤上的按鈕

二、GIL

前言:了解Python的都知道,在Python中多線程并不是真正意義上的多線程。那為什么在Python中多線程的威力沒有像其他語言那樣大呢?

1.GIL全稱是全局解釋器鎖,保證了同一時刻只有一個線程在執行。

2.作用:在單核的情況下實現多任務!這在當時非常厲害的技術。

3.產生問題的原因:一個CPU分配給一個進程,進程的線程使用GIL進行資源搶奪。在多核情況下,會使其他核空閑,CPU的利用率不高。

4.解決方案:

1). 使用其他解釋器,如JPython(但是太慢了,不好!)。因為只有在CPython中才存在GIL。

2). 使用其他語言(C/Java)來寫多線程這部分代碼

3). 使用多進程+協程的方式。(推薦的方式,很高效)!

三、淺拷貝VS深拷貝

深拷貝(deepcopy):它是一種遞歸的方式拷貝某個對象,單獨形成一個新對象。這種方式很浪費資源。使用from some_moudle import xx 就是一種深拷貝的方式!

淺拷貝(copy):它支復制一層信息,占用的資源少!而且大部分的形式都是一淺拷貝的方式!

深拷貝示意圖:

淺拷貝示意圖:

四、面向對象總結:

1.私有化

(1).x:公有變量;

(2)._x:單個前置下劃線,私有化方法或屬性,from some_module import *是不能導入的,只有類和對象可以訪問;

(3).__x:雙前置下劃線,避免與子類中的屬性命名沖突,外部無法訪問,但是可以通過特殊的方式(obj._類名__xx)訪問到

(4).__x__:雙前后下劃線,用戶名字空間的魔法方法后屬性。最好不要用這種命名方式!

(5).x_:單后置下劃線,用于避免與Python關鍵詞沖突!不要使用哦!

2.封裝

一個功能一個函數,把相關函數封裝成一個類對象。好處是代碼可以復用,讓代碼更加清爽!

3.繼承:

多個子類擁有相同的功能,然后把相同的函數放到父類中,通過子類的方式繼承下來。好處是代碼復用。

4.多態:

(1).必須要有繼承;

(2).不同對象調用同一個函數,會有不同的表現形式;

(3).Python中的多態并不是嚴謹的多態,因為沒有做類型檢查!

5.類與實例對象之間的關系:

6.面向函數編程 VS 面向對象編程:

面向函數編程:一個功能,一個函數。

面向對象編程:把相關函數封裝成一個類對象。

五、模塊導入與路徑搜索

1.動態導入:

(1). import module;

(2). __import__("some_module")

這兩種方式是一樣的!

2.路徑搜索:

在導入某個模塊時,會在sys.path()中搜索目標模塊。如果找到了,那么就停止搜索,否則一直找到最后!

3.重新加載模塊

from imp import reload,reload函數的好處是當導入的某個模塊做了修改時,又不想通過關機來重新導入,而是進行熱更新,就能獲取到修改后的值!

六、類中方法總結

1.魔法方法

(1). __init__:用于初始化對象

(2). __new__:用于創建對象

(3).__call_:使對象變得可調用

(4). __dict__:把類中的屬性組成一個字典,屬性名作為key, 屬性值作為value

(5).__class__:用于查看對象是由哪個類創建的

2.super():

當有多個類發生繼承關系時,Python內部會維護著一張繼承表(通過__mro__可以查看)。super()在當前繼承表中找到自己的位置,然后執行下一個類的__init__方法。

七、上下文管理器(ContextManager)

在很多時候,我們都會看到with open(filename, 'w') as f:pass,這種操作文件的方式。這種操作的好處就是我們不需要手動調用f.close()來關閉我們打開的文件。這是為什么呢?

任何一個上下文管理器對象都可以使用with關鍵字來操作。什么是上下文管理器呢?

只要實現了__enter__()和__exit__()方法的類就是上下文管理器!

__enter__():返回資源對象。

__exit__():在操作完成之后,進行清除工作。如關閉文件

連接數據庫的上下文管理器:

第一種方式:

from pymysql import connect
class DBHelper:
def __init__(self):
self.conn = connect(host='localhost', port=3306, user='user', password='password', database='database', charset='utf8')
self.csr = self.conn.cursor()
def __enter__(self):
return self.csr
def __exit__(self, exc_type, exc_val, exc_tb):
self.csr.close()
self.conn.close()
with DBHelper() as csr:
sql = """select * from table;"""
csr.execute(sql)
all_datas = csr.fetchall()
for item in all_datas:
print(item)

第二種方式:

@contextmanager
def conn_db():
conn = connect(host='localhost', port=3306, user='user', password='password', database='database', charset='utf8')
csr = conn.cursor()
yield csr
csr.close()
conn.close()
with conn_db() as csr:
sql = """select * from table"""
csr.execute(sql)
all_datas = csr.fetchall()
for item in all_datas:
print(item)

*聲明:本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

覺得不錯,點個“在看”然后轉發出去

總結

以上是生活随笔為你收集整理的黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。