Python_提高

GIL全局解釋器鎖

  • 描述Python GIL的概念, 以及它對python多線程的影響?編寫?個 多線程抓取??的程序,并闡明多線程抓取程序是否可?單線程性 能有提升轨奄,并解釋原因。

    1. Python語?和GIL沒有半?錢關(guān)系拒炎。僅僅是由于歷史原因在 Cpython虛擬機(jī)(解釋器)挪拟,難以移除GIL。

    2. GIL:全局解釋器鎖击你。每個線程在執(zhí)?的過程都需要先獲取 GIL玉组,保證同?時刻只有?個線程可以執(zhí)?代碼谎柄。

    3. 線程釋放GIL鎖的情況: 在IO操作等可能會引起阻塞的system call之前,可以暫時釋放GIL,但在執(zhí)?完畢后,必須重新獲取GIL Python 3.x使?計(jì)時器(執(zhí)?時間達(dá)到閾值后,當(dāng)前線程釋放 GIL)或Python 2.x惯雳,tickets計(jì)數(shù)達(dá)到100

    4. Python使?多進(jìn)程是可以利?多核的CPU資源的朝巫。

    5. 多線程爬取?單線程性能有提升,因?yàn)橛龅絀O阻塞會?動釋放 GIL鎖

  • 解決方法

    1. 換解釋器

    2. 在一些部位換語言

淺拷貝石景、深拷貝

1.淺拷貝

  • 淺拷貝是對于一個對象的頂層拷貝(拷貝了引用劈猿,并沒有拷貝內(nèi)容)

2.深拷貝

  • 深拷貝是對于一個對象所有層次的拷貝(遞歸)

3.拷貝的其他方式

  • 切片表達(dá)式可以賦值一個序列(淺拷貝)

  • 字典的copy方法可以拷貝一個字典(淺拷貝)

4.注意點(diǎn)

  • 拷貝對不可變類型和可變類型的copy不同
    1.copy.copy對于可變類型,會進(jìn)行淺拷貝
    2.copy.copy對于不可變類型潮孽,不會拷貝揪荣,僅僅是指向

私有化

  • xx:公有變量

  • _x:但前置下劃線,私有化屬性或方法往史,from somemodule import *禁止導(dǎo)入仗颈,類對象和子類可以訪問

  • __xx:雙前置下劃線,避免與子類中的屬性命名沖突怠堪,無法在外部直接訪問(名字重整所以訪問不到)

  • xx:雙前后下劃線揽乱,用戶名字空間的魔法對象或?qū)傩悦肌@纾?strong>init,__不要自己發(fā)明這樣的名字

  • xx_:單后置下劃線粟矿,用于避免與Python關(guān)鍵詞的沖突

import導(dǎo)入模塊

  • import搜素路徑
improt sys
print(sys.path)
- 從上面列出的目錄里依次查找導(dǎo)入的模塊文件

-  "表示當(dāng)前路徑

-  列表中的路徑的先后順序代表了python解釋器在搜索模塊時的先后順序
  • 重新導(dǎo)入模塊
  • 模塊被導(dǎo)入后, import module 不能重新導(dǎo)入模塊损拢,重新導(dǎo)入需要reload

from imp import reload
reload(模塊名)

  • 多模塊開發(fā)時注意點(diǎn)
  • 要修改某個引用模塊內(nèi)的屬性值陌粹,必須使用 import

封裝、繼承福压、多態(tài)

  • 在使用面向過程編程時掏秩,當(dāng)需要對數(shù)據(jù)處理時,需要考慮用哪個模板中哪個函數(shù)來進(jìn)行操作荆姆,但是當(dāng)用面向?qū)ο缶幊虝r蒙幻,因?yàn)橐呀?jīng)將數(shù)據(jù)存儲到了這個獨(dú)立的空間中,這個獨(dú)立的空間(即對象)中通過一個特殊的變量(class)能夠獲取到類(模板)胆筒,而且這個類中的方法是有一定數(shù)量的邮破,與此類無關(guān)的將不會出現(xiàn)在本類中,因此需要對數(shù)據(jù)處理時仆救,可以很快速的定位到需要的方法是誰 這樣更方便
  • 全局變量是只能有1份的抒和,多很多個函數(shù)需要多個備份時,往往需要利用其它的變量來進(jìn)行儲存彤蔽;而通過封裝 會將用來存儲數(shù)據(jù)的這個變量 變?yōu)榱藢ο笾械囊粋€“全局”變量摧莽,只要對象不一樣那么這個變量就可以再有1份,所以這樣更方便
  • 代碼劃分更清晰

多繼承以及MRO順序

1.單獨(dú)調(diào)用父類的方法

2.多繼承中super調(diào)用有所父類的被重寫的方法
* 如果使用super().xxxx()那么會拿著當(dāng)前類的名字到類名.mro獲取到的元組中去找顿痪,只要找到镊辕,那么就調(diào)用它的下一個方法
* 如果使用super(類名油够,self).xxxx()那么會拿著類的名字到類名.mro獲取到的元組中去找,只要找到丑蛤,那么就調(diào)用它的下一個方法

3.單繼承中super

總結(jié)

1.super().init相對于類名.init,在單繼承上用法基本無差

2.但在多繼承上有區(qū)別叠聋, super方法能保證每個父類的方法只會執(zhí)行一次,而使用類名的方法會導(dǎo)致方法被執(zhí)行多次受裹,具體看前面的輸出結(jié)果

3.多繼承時碌补,使用super方法,對父類的傳參數(shù)棉饶,應(yīng)該是由于python中super的算法導(dǎo)致的原因厦章,必須把參數(shù)全部傳遞,否則會報錯

4.單繼承時照藻,使用suoer方法袜啃, 則不能全部傳遞,只能傳父類方法所需的參數(shù)幸缕,否則會報錯

5.多繼承時群发,相對與使用類名.init方法,要把每個父類全部寫一遍发乔,而使用super方法熟妓,只需寫一句話便執(zhí)行全部父類的方法, 這也是為何多繼承需要全部傳參的一個原因

靜態(tài)方法和類方法

1.類屬性栏尚、實(shí)例屬性

  • 實(shí)例屬性屬于對象:實(shí)例屬性在每個對象中都要保存一份
  • 類屬性屬于類:類屬性內(nèi)存中只保存一份
  • 應(yīng)用場景:通過類創(chuàng)建實(shí)例對象時起愈,如果每個對象需要具有相同名字的屬性,那么就使用類屬性译仗,用一份即可

2.實(shí)例方法抬虽,靜態(tài)方法和類 方法;三種方法在內(nèi)存中都?xì)w屬于類纵菌,區(qū)別在于調(diào)用方式不同

  • 實(shí)例方法:由對象調(diào)用阐污;至少一個self參數(shù);執(zhí)行實(shí)例方法時咱圆,自動將調(diào)用該方法的對象賦值給self

  • 類方法:由類調(diào)用笛辟;至少一個cls參數(shù);執(zhí)行類方法時闷堡,自動將調(diào)用該方法的類賦值給cls

  • 靜態(tài)方法:由類調(diào)用隘膘;無默認(rèn)參數(shù)

  • 相同點(diǎn):對于所有的方法而言,均屬于類杠览,所以在內(nèi)存中也只保存一份

  • 不同點(diǎn):方法調(diào)用者不同弯菊、調(diào)用方法時自動傳入?yún)?shù)不同

property屬性

  • 一種用起來像是使用的實(shí)例屬性一樣的特殊屬性,可以對應(yīng)于某個方法
  • 定義時,在實(shí)例方法的基礎(chǔ)上添加@property裝飾器管钳;并且僅有一個self參數(shù)
  • 調(diào)用時钦铁,無需括號

方法:foo_obj.func()
property屬性:foo_obj.prop

  • Python的property屬性的功能是 :property屬性內(nèi)部進(jìn)行一系列的邏輯計(jì)算,最終將計(jì)算結(jié)果返回
property屬性的兩種方式
  • 裝飾器即:在方法上應(yīng)用裝飾器
  • 類屬性即:在類中定義值為property對象的類屬性
裝飾器方式
  • 經(jīng)典類中的屬性只有一種訪問方式才漆,其對應(yīng)被@property修飾的方法

  • 新式類中的屬性有三種訪問方式牛曹,并分別對應(yīng)了三個被@property、@方法名.setter醇滥、@方法名.deleter修飾的方法黎比,可以根據(jù)幾個屬性的訪問特點(diǎn)分別將三個方法定義為對同一個屬性:獲取、修改鸳玩、刪除

  • 當(dāng)使用類屬性的方式創(chuàng)建property屬性時阅虫,經(jīng)典類和新式類無區(qū)別

property方法的四個參數(shù)
  • 第一個參數(shù)是方法名,調(diào)用對象.屬性時自動觸發(fā)執(zhí)行方法
  • 第二個參數(shù)是方法名不跟,調(diào)用對象.屬性 = xxx時自動觸發(fā)執(zhí)行方法
  • 第三個參數(shù)是方法名颓帝,調(diào)用del對象.屬性時自動觸發(fā)執(zhí)行方法
  • 第四個參數(shù)是字符串,調(diào)用對象.屬性.doc,此參數(shù)是該屬性的描述信息
總結(jié)
  • 定義property屬性共有兩種方式,分別是【裝飾器】和【類屬性】窝革,而【裝飾器】方式針對經(jīng)典類和新式類又有所不同
  • 通過使用property屬性购城,能夠簡化調(diào)用者在獲取數(shù)據(jù)的流程

proeprty屬性應(yīng)用

  • 重新實(shí)現(xiàn)一個屬性的設(shè)置和讀取方法,可做邊界判定

魔法屬性

1.doc:表示類的描述信息

2.moduleclass

  • module表示當(dāng)前操作的對象在那個模塊
  • class表示當(dāng)前操作的對象類是什么(當(dāng)獲取實(shí)例屬性的時候虐译,如果實(shí)例對象中沒有這個屬性瘪板,那么就會按照class指定的類對象中找到這個類屬性)

3.init:初始化方法,通過類創(chuàng)建對象時菱蔬,自動觸發(fā)執(zhí)行

4.del:當(dāng)對象在內(nèi)存中被釋放篷帅,自動觸發(fā)執(zhí)行(對象計(jì)數(shù)為0或程序執(zhí)行結(jié)束時觸發(fā))

5.call:對象后面加括號史侣,觸發(fā)執(zhí)行

6.dict:類會對象中的所有屬性

7.str:如果一個類中定義了str,那么在打印對象時拴泌,默認(rèn)輸出該方法的返回值(只要是獲取這個對象的描述的情況,都會調(diào)用)

8.getitem惊橱、setitem蚪腐、delitem

  • 用于索引操作,如字典税朴,以上分別表示獲取回季、設(shè)置、刪除

9.getslice正林、setslice泡一、delslice

  • 該三個方法用于分片操作,如:列表

面向?qū)ο笤O(shè)計(jì)

  • 繼承-是基于Python中的屬性查找(如X.name)
  • 多態(tài)-在X.medthod方法中觅廓,method的意義取決于X的類型
  • 封裝-方法和運(yùn)算符實(shí)現(xiàn)行為鼻忠,數(shù)據(jù)隱藏默認(rèn)是一種慣例

with與"上下文管理器"

  • 系統(tǒng)資源如文件、數(shù)據(jù)庫連接杈绸、socket而言帖蔓。應(yīng)用程序打開這些資源并執(zhí)行完業(yè)務(wù)邏輯之后矮瘟,必須做的一件事就是要關(guān)閉(斷開)該資源
  • 上下文管理器:任何實(shí)現(xiàn)了enter()和exit()方法的對象都可稱之為上下文管理器
  • with語法用于簡化資源操作的后續(xù)清除操作,是try/finally的替代方法塑娇,實(shí)現(xiàn)原理建立在上下文管理器之上
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澈侠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子埋酬,更是在濱河造成了極大的恐慌哨啃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件写妥,死亡現(xiàn)場離奇詭異棘催,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耳标,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門醇坝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人次坡,你說我怎么就攤上這事呼猪。” “怎么了砸琅?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵宋距,是天一觀的道長。 經(jīng)常有香客問我症脂,道長谚赎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任诱篷,我火速辦了婚禮壶唤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棕所。我一直安慰自己闸盔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布琳省。 她就那樣靜靜地躺著迎吵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪针贬。 梳的紋絲不亂的頭發(fā)上击费,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音桦他,去河邊找鬼蔫巩。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的批幌。 我是一名探鬼主播础锐,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荧缘!你這毒婦竟也來了皆警?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤截粗,失蹤者是張志新(化名)和其女友劉穎信姓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绸罗,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡意推,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了珊蟀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菊值。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖育灸,靈堂內(nèi)的尸體忽然破棺而出腻窒,到底是詐尸還是另有隱情,我是刑警寧澤磅崭,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布儿子,位于F島的核電站,受9級特大地震影響砸喻,放射性物質(zhì)發(fā)生泄漏柔逼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一割岛、第九天 我趴在偏房一處隱蔽的房頂上張望愉适。 院中可真熱鬧,春花似錦蜂桶、人聲如沸儡毕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雷恃,卻和暖如春疆股,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倒槐。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工旬痹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓两残,卻偏偏與公主長得像永毅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子人弓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容