Python 使用總結(jié)(未完待整理)

理解pythonic概念, 詳見書籍<<python之禪>>

編寫pythonic代碼

1. 避免不規(guī)范代碼, 比如只用大小寫區(qū)分變量, 使用容易混淆的變量名, 害怕過長(zhǎng)變量名等.
    但是, 有時(shí)長(zhǎng)的變量名會(huì)使代碼更加易讀.
2. 深入學(xué)習(xí)python相關(guān)知識(shí), 比如語言特性, 庫(kù)特性等, 比如python演變過程等. 深入學(xué)習(xí)一兩個(gè)業(yè)內(nèi)公認(rèn)的python的代碼庫(kù), 比如Django, Flask. 

理解python與C的不同之處, 比如縮進(jìn)與{}, 單引號(hào)與雙引號(hào), 三元操作符, switch-case語句.

在代碼中適當(dāng)添加注釋

適當(dāng)添加空行, 使代碼布局更加合理

編寫函數(shù)的4個(gè)原則

1. 函數(shù)設(shè)計(jì)要盡量短小, 嵌套層次不宜過深
2. 函數(shù)聲明應(yīng)該做到合理, 簡(jiǎn)單, 易用
3. 函數(shù)參數(shù)設(shè)計(jì)應(yīng)該考慮向下兼容
4. 一個(gè)函數(shù)只做一件事, 盡量保證函數(shù)粒度的一致性

將常量集中在一個(gè)文件, 且常量名盡量使用全大寫字母

編程慣用法

利用assert 語句來發(fā)現(xiàn)問題, 但要注意, 斷言會(huì)影響效率

數(shù)據(jù)交換值時(shí)不推薦使用臨時(shí)變量, 而是直接a, b = b, a

充分利用惰性計(jì)算(lazy evaluation)的特性, 從而避免不必要的計(jì)算

理解枚舉替代實(shí)現(xiàn)的缺陷(最新版python已經(jīng)加入了枚舉特性)

不推薦使用type來進(jìn)行類型檢查, 因?yàn)橛袝r(shí)候type的結(jié)果并不一定可靠. 如果有需求, 建議使用isinstance函數(shù)來代替

盡量將變量轉(zhuǎn)化為浮點(diǎn)類型后再做除法(python3以后不用考慮)

警惕eval()函數(shù)的安全漏洞, 有點(diǎn)類似SQL注入

使用enumerate()同時(shí)獲取序列迭代的索引和值

分清==和is的適用場(chǎng)景, 特別是在比較字符串等不可變類型變量時(shí)

構(gòu)建合理的包層次來管理module

基本用法

有節(jié)制的使用from ... import語句, 防止污染命名空間

i+=1 不等于++i, 在python中, ++i前邊的加號(hào)僅表示正, 不表示操作

習(xí)慣使用with自動(dòng)關(guān)閉資源, 特別是在文件讀寫中

使用else子句簡(jiǎn)化循環(huán)(異常處理)

遵循異常處理的幾點(diǎn)基本原則

1. 注意異常的粒度, try塊中盡量少寫代碼
2. 謹(jǐn)慎使用單獨(dú)的except語句, 或except Exception語句, 而是定位到具體異常
3. 注意異常捕獲的順序, 再合適的層次處理異常
4. 使用更加友好的異常信息, 遵守異常參數(shù)的規(guī)范

避免finally中可能發(fā)生的缺陷

深入理解None, 正確判斷對(duì)象是否為空

連接字符串應(yīng)優(yōu)先使用join函數(shù), 而不是+操作

格式化字符串時(shí)盡量使用.format函數(shù), 而不是%形式. 最好是使用f''

區(qū)別對(duì)待可變對(duì)象和不可變對(duì)象, 特別是作為函數(shù)參數(shù)時(shí)

[], {}, (): 一致的容器初始化形式. 使用列表解析可以使代碼更清晰, 同時(shí)效率更高.

函數(shù)傳參數(shù), 既不是傳值也不是傳引用, 而是傳對(duì)象或者說對(duì)象的引用

警惕默認(rèn)參數(shù)潛在的問題, 特別是當(dāng)默認(rèn)參數(shù)為可變對(duì)象時(shí).

函數(shù)中慎用變長(zhǎng)參數(shù)args, kargs

1. 這種使用太靈活, 從而使的函數(shù)簽名不夠清晰, 可讀性變差
2. 如果因?yàn)閰?shù)過多而使用變長(zhǎng)參數(shù)簡(jiǎn)化函數(shù)定義, 那么一般該函數(shù)可以重構(gòu)

深入理解str()和repr()的區(qū)別

1. 兩者之間的目標(biāo)不同: str主要面向客戶, 其目的使可讀性, 返回形式為用戶友好性和可讀性都比較高的字符串形式;
                                      repr是面向python解釋器或者說是python開發(fā)人員的, 其目的是準(zhǔn)確性, 其返回值表示python解釋器內(nèi)部的定義
2. 在解釋器中直接輸入變量, 默認(rèn)調(diào)用repr函數(shù), 而`print(var)`默認(rèn)調(diào)用str函數(shù)
3. repr函數(shù)的返回值一般可以用eval函數(shù)來還原對(duì)象
4. 兩者分別調(diào)用對(duì)象的內(nèi)建函數(shù)`__str__()`和`__repr__()`

分清靜態(tài)方法 static method 和類方法 class method的使用場(chǎng)景

庫(kù)的使用

掌握字符串的基本用法

按需選擇sort()sorted()函數(shù)

1. `sort()`是列表在就地進(jìn)行排序, 所以不能排序元組等不可變類型
2. `sorted()`可以排序任意的可迭代類型, 同時(shí)不改變?cè)兞勘旧?

使用copy()模塊深拷貝對(duì)象, 區(qū)分淺拷貝(shallow copy) 和深拷貝(deep copy)

使用Counter進(jìn)行計(jì)數(shù)統(tǒng)計(jì), Counter是字典類的子類, 在collections模塊中

深入掌握ConfigParse

使用argparse模塊處理命令行參數(shù)

使用pandas處理大型csv文件

python本身提供一個(gè)csv文件處理模塊, 并提供reader, writer等函數(shù)
pandas可提供分塊, 合并處理等, 適用于數(shù)據(jù)量大的情況, 且對(duì)二維數(shù)據(jù)操作更方便

使用ElementTree解析xml

理解模塊pickle的優(yōu)劣

1. 優(yōu)勢(shì): 接口簡(jiǎn)單, 各平臺(tái)通用, 支持的數(shù)據(jù)類型廣泛, 擴(kuò)展性強(qiáng)
2. 劣勢(shì): 不保證操作的原子性, 存在安全問題, 不同語言之間不兼容

序列化的另一個(gè)選擇json模塊: load和dump操作

使用traceback獲取棧信息

使用logging記錄日志信息

使用treading模塊編寫多線程程序

使用Queue模塊使多線程編程更安全

設(shè)計(jì)模式

利用模塊實(shí)現(xiàn)單例模式

用mixin模式讓程序更加靈活

用發(fā)布-訂閱模式實(shí)現(xiàn)松耦合

用狀態(tài)模式美化代碼

內(nèi)部機(jī)制

理解build-in對(duì)象

init()不是構(gòu)造方法, 理解new()與它之間的區(qū)別

理解變量的查找機(jī)制, 即作用域

局部作用域 - 全局作用域 - 嵌套作用域 - 內(nèi)置作用域

為什么需要self參數(shù)

理解MRO(方法解析順序)與多繼承

理解描述符機(jī)制

區(qū)別__getattr__()__getattribute__()方法之間的區(qū)別

使用更安全的property

掌握元類metaclass

熟悉python對(duì)象協(xié)議

利用操作符重載實(shí)現(xiàn)中綴語法

熟悉python的迭代器協(xié)議

熟悉python的生成器

基于生成器的協(xié)程和greenlet, 理解協(xié)程, 多線程, 多進(jìn)程之間的區(qū)別

理解GIL的局限性

對(duì)象的管理和垃圾回收

使用工具輔助項(xiàng)目開發(fā)

從pypianzhuang第三方包

使用pip和yolk安裝管理包

做paster創(chuàng)建包

理解單元測(cè)試的概念

為包編寫單元測(cè)試

利用測(cè)試驅(qū)動(dòng)開發(fā)(TDD)提高代碼的可測(cè)性

使用pylint檢查代碼風(fēng)格

代碼風(fēng)格審查
代碼錯(cuò)誤檢查
發(fā)現(xiàn)重復(fù)以及不合理的代碼, 方便重構(gòu)
高度的可配置化和可定制化
支持各種IDE和編輯器的集成

進(jìn)行高效的代碼審查

將包發(fā)布到pypi

性能剖析與優(yōu)化

了解代碼優(yōu)化的基本原則

借助性能優(yōu)化工具

利用cProfile定位性能瓶頸

使用memory_profiler和objgraph剖析內(nèi)存使用

努力降低算法復(fù)雜度

掌握循環(huán)優(yōu)化的基本技巧

減少循環(huán)內(nèi)部的計(jì)算
將顯示循環(huán)改為隱式循環(huán), 當(dāng)然這會(huì)犧牲代碼的可讀性

使用生成器提高效率

使用不同的數(shù)據(jù)結(jié)構(gòu)優(yōu)化性能

充分利用set的優(yōu)勢(shì)

使用multiprocessing模塊客服GIL缺陷

使用線程池提高效率

使用Cpython編寫擴(kuò)展模塊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市竿拆,隨后出現(xiàn)的幾起案子宙拉,更是在濱河造成了極大的恐慌,老刑警劉巖丙笋,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谢澈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡御板,警方通過查閱死者的電腦和手機(jī)锥忿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怠肋,“玉大人敬鬓,你說我怎么就攤上這事◇细鳎” “怎么了钉答?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)杈抢。 經(jīng)常有香客問我数尿,道長(zhǎng),這世上最難降的妖魔是什么惶楼? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任右蹦,我火速辦了婚禮,結(jié)果婚禮上歼捐,老公的妹妹穿的比我還像新娘何陆。我一直安慰自己,他們只是感情好豹储,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布贷盲。 她就那樣靜靜地躺著,像睡著了一般剥扣。 火紅的嫁衣襯著肌膚如雪晃洒。 梳的紋絲不亂的頭發(fā)上慨灭,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天朦乏,我揣著相機(jī)與錄音球及,去河邊找鬼。 笑死呻疹,一個(gè)胖子當(dāng)著我的面吹牛吃引,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刽锤,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼镊尺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了巢块?” 一聲冷哼從身側(cè)響起颂郎,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤薪夕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弄砍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡输涕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年音婶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莱坎。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣式,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檐什,到底是詐尸還是另有隱情碴卧,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布乃正,位于F島的核電站住册,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏烫葬。R本人自食惡果不足惜界弧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搭综。 院中可真熱鬧垢箕,春花似錦、人聲如沸兑巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒋歌。三九已至帅掘,卻和暖如春委煤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背修档。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工碧绞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吱窝。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓讥邻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親院峡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兴使,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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