国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

改善Python程序的建議

Clect / 3112人閱讀

摘要:斷言是用來捕獲用戶定義的約束的,不是用來捕獲程序本身的錯誤的。使用自動關(guān)閉資源語句可以在代碼塊執(zhí)行完畢后還原進入該代碼塊時的現(xiàn)場。在文件管理時使用總能保證文件被正常關(guān)閉。則是將指向?qū)ο蟆⒖假Y料編寫高質(zhì)量代碼改善程序的個建議

三元操作符:
我們都知道在C語言中,三元操作符為C ? X : Y,在人們的強烈要求下,python2.5之后三元操作符等價為X if C else Y

什么時候應(yīng)該使用斷言?
斷言的基本語法如下:
assert expression1 ["," expression2]
計算expression1的值會返回True或者False,當(dāng)值為False的時候會引發(fā)AssertError,而expression2是可選的,常用來查看具體的異常信息。
斷言是有代價的,會對性能產(chǎn)生一定的影響,但python并沒有嚴格定義調(diào)試與發(fā)布模式之間的差別,通常禁用斷言的方法是在運行腳本時加上-O標志,這種方法帶來的影響是它不優(yōu)化字節(jié)碼,而是忽略與斷言有關(guān)的語句。
斷言是用來捕獲用戶定義的約束的,不是用來捕獲程序本身的錯誤的。

斷言應(yīng)該被使用在正常邏輯不可到達的地方或正常情況下總是為真的場合。

異常能處理就不要使用斷言。

不要用斷言檢查用戶輸入。

當(dāng)函數(shù)調(diào)用后,需要確定返回值是否合理時可以使用斷言。

當(dāng)條件是業(yè)務(wù)邏輯繼續(xù)的先決條件時可以使用斷言。

我最近在一個爬蟲代碼里使用了幾次斷言,使用斷言是為了保證程序自身所記錄的頁數(shù)與爬蟲所運行到的頁數(shù)相同,否則會在存儲數(shù)據(jù)時發(fā)生錯誤。


數(shù)據(jù)交換值時不推薦使用中間變量
x,y = y,x 這種方法有更好的性能。

構(gòu)建合理的包層次來管理module
本質(zhì)上每一個python文件都是一個模塊,但在大的項目中把所有的python文件放在一個目錄下不是一個好的做法。我們應(yīng)該用package包來管理模塊。
__init__.py的一些作用:

Package/ __init__.py
  Module1.py
  Module2.py
  Subpackage/ __init__.py
        Module1.py
        Module2.py

使包和普通目錄區(qū)分

如果我們在Package包下的__init__.py中添加:
from Module1 import Test語句,則可以直接使用from Package import Test來導(dǎo)入類Test

當(dāng)__init__.py為空,意圖使用from Package import *語句將包Package中所有的模塊導(dǎo)入當(dāng)前命名空間將會失敗。它僅僅會執(zhí)行__init__.py文件。因此我們需要修改__init__.py文件。
如果我們在__init__.py文件中添加:

__all__ = ["Module1","Module2","Subpackage"]
這樣我們就能使用from Package import *語句將包Package中所有的模塊導(dǎo)入當(dāng)前命名空間。


使用with自動關(guān)閉資源
with語句可以在代碼塊執(zhí)行完畢后還原進入該代碼塊時的現(xiàn)場。在文件管理時使用with總能保證文件被正常關(guān)閉。

None的特殊性
所有被賦值為None的變量相等,并且None與任何其他非None的對象比較結(jié)果都為False.

字符串的連接特別是大規(guī)模字符串的處理,應(yīng)該優(yōu)先使用join而不是+。
如果我們進行以下操作:S1+S2+S3+..,執(zhí)行一次+操作便會在內(nèi)存中申請一塊新的內(nèi)存,并將上一次操作的結(jié)果和本次操作的右操作數(shù)復(fù)制到該內(nèi)存中。在N個字符串連接中,會產(chǎn)生N-1個中間結(jié)果,每產(chǎn)生一個中間結(jié)果都要申請和復(fù)制一次內(nèi)存,總共要申請N-1次內(nèi)存,嚴重影響效率。時間復(fù)雜度接近O(n^2)。
而當(dāng)使用join()方法連接字符串時,會首先計算需要申請的總的內(nèi)存空間,然后一次性申請所需內(nèi)存并將字符序列中的每一個元素復(fù)制到內(nèi)存中。時間復(fù)雜度為O(n)。

python中一切皆對象,每一個對象都有一個唯一的id。
函數(shù)傳參既不是傳值也不是傳引用
在C/C++中,如果執(zhí)行:

a = 5;
b = a;
b = 7;

在內(nèi)存中申請一塊內(nèi)存并將a的值復(fù)制到該內(nèi)存中,當(dāng)執(zhí)行b = 7時將b對應(yīng)的值從5改到7。
而對于python,賦值并不是復(fù)制,b=a使得a和b引用同一個對象。b=7則是將b指向?qū)ο?。
python函數(shù)參數(shù)到底是傳值還是傳引用,實際都不是,而是傳對象或者說傳對象的引用。
對可變對象的修改在函數(shù)外部以及內(nèi)部都可見,調(diào)用者和被調(diào)用者之間共享這個對象。
對于不可變對象,由于并不能真正修改,因為,修改往往是通過生成一個新對象然后賦值來實現(xiàn)的。

警惕默認參數(shù)潛在的問題

def在python中是一個可執(zhí)行的語句,當(dāng)解釋器執(zhí)行def時,默認參數(shù)也會被計算,并存在函數(shù)的.func_defaults屬性中。  
由于Python中函數(shù)參數(shù)傳遞的是對象,可變對象在調(diào)用者和被調(diào)用者之間共享。
def appendtest(newitem,lista=[]):
    print(id(lista))
    lista.append(newitem)
    print(id(lista))
    return lista

>>> appendtest(1)
12345
12345
[1]
>>> appendtest("a")
12345
12345
[1,"a"]

PS:我們可以用這個屬性,統(tǒng)計某個方法被調(diào)用的次數(shù)。
如果不想讓默認參數(shù)所指向的對象在所有的函數(shù)調(diào)用中共享,而是在函數(shù)調(diào)用的過程中動態(tài)生成,可在定義的時候使用None對象作為占位符。

def appendtest(newitem,lista=None):
    print(id(lista))
    lista.append(newitem)
    print(id(lista))
    return lista

str()和repr()的區(qū)別:目標不同:str()面向用戶,repr()面向解釋器和開發(fā)人員
字符串的一些技巧:

python遇到未閉合的小括號時會自動將多行代碼拼接為一行和把相鄰的兩個字符串字面量拼接在一起。

s = ("SELECT * "
    "FROM atable "
    "WHERE afirld="value"")
print(s)
>>> SELECT * FROM atable WHERE afirld="value"

str的一些方法
str方法很多,只說幾個有意思的:

count()能查找子串在字符串中出現(xiàn)的次數(shù),這個方法在調(diào)用replace方法時能使用,可以批量替換。
replace(old,new[,count])用以替換字符串的某些子串,如果指定count參數(shù),就最多替換count次,不指定則替換全部。


參考資料:《編寫高質(zhì)量代碼:改善Python程序的91個建議》

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38504.html

相關(guān)文章

  • Python貓薦書系統(tǒng)之四:《Python源碼剖析》

    摘要:以下內(nèi)容僅針對版書籍,等新版上市后,薦書欄目會對兩版的差異跟進介紹。當(dāng)然,后續(xù)其它薦書的書目,也很有可能會送福利,一樣不容錯過。 showImg(https://segmentfault.com/img/bVbjIxq?w=6000&h=4000); 大家好,新一期的薦書欄目如期跟大家見面了。 先來看看今天的主角是誰:《Python源碼剖析——深度探索動態(tài)語言核心技術(shù)》,2008年出版...

    simpleapples 評論0 收藏0
  • Python貓薦書系列之五:Python高性能編程

    摘要:鋪墊已了,進入今天的正題,貓薦書系列之五高性能編程本書適合已入門還想要進階和提高的讀者閱讀。書中列舉了兩個慘痛的教訓(xùn)華爾街公司騎士資本由于軟件升級引入的錯誤,損失億美元公司小時全球中斷的嚴重事故。 showImg(https://segmentfault.com/img/bVbm92w?w=6720&h=4480); 稍微關(guān)心編程語言的使用趨勢的人都知道,最近幾年,國內(nèi)最火的兩種語言非...

    channg 評論0 收藏0
  • Python貓薦書系列之五:Python高性能編程

    摘要:鋪墊已了,進入今天的正題,貓薦書系列之五高性能編程本書適合已入門還想要進階和提高的讀者閱讀。書中列舉了兩個慘痛的教訓(xùn)華爾街公司騎士資本由于軟件升級引入的錯誤,損失億美元公司小時全球中斷的嚴重事故。 showImg(https://segmentfault.com/img/bVbm92w?w=6720&h=4480); 稍微關(guān)心編程語言的使用趨勢的人都知道,最近幾年,國內(nèi)最火的兩種語言非...

    馬永翠 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<