①使用區域性變數代替全域性變數
如:s = os.linesep #優點簡短標識便於維護,區域性變數查詢更快,能提高效能並節省記憶體;
②減少函式呼叫次數
物件型別判斷時,採用isinstance()比較最優,物件型別身份(id())比較次子,採用(type())比較最次;
#如判定變數num是否為整數型別
isinstance(num, (int)) #呼叫一次函式
type(num) is type(0) #身份比較
type(num) == type(0) #呼叫三次函式
#不要把重複操作的內容作為引數放到迴圈條件中,避免重複運算
#每次迴圈都需要重新執行len(a)
while i < len(a):
statement
#len(a)僅執行一次
m = len(a)
while i < m:
statement
#使用x中的某個函式或物件y時,應該直接用 from x import y,而不是import x 或 import x.y;
這樣可以減少一次查詢(解析器不必要首先查詢x模組,然後在x模組的字典中查詢y)
③採用對映代替條件查詢
#對映(比如dict等)的搜尋速度遠快於條件語句(比如if等)。
#if查詢
if a == 1:
b = 10
elif a == 2:
b = 20
...#dict查詢,效能更優
d =
b = d[a]
④直接迭代序列元素
對序列(str,list,tuple等),直接迭代序列元素,比迭代元素的索引速度更快。
a = [1, 2, 3]
#迭代元素
for item in a:
print(item)
#迭代索引
for i in range(len(a)):
print(a[i])
⑤採用生成器表示式代替列表解析
列表解析(list comprehension),會產生整個列表,對大量資料的迭代會產生負面效應.
而生成器表示式則不會,其不會真正建立列表,而返回乙個生成器,在需要時產生乙個值(延遲計算),對記憶體更加優化。
#計算檔案f的非空字元個數
#列表解析
a = sum([i*i for i in range(6)])
#生成器表示式
b = sum(i*i for i in range(6))
⑥先編譯後呼叫
# 使用eval(),exec()函式執行**時,最好呼叫**物件(提前通過compile()函式編譯成位元組碼),而不是直接呼叫str,可以避免多次執行重複編譯過程,提高程式效能
# 正規表示式模式模式匹配也類似,也最好先將正規表示式模式編譯成regex物件(通過re.complie()函式),然後再執行比較和匹配
⑦模組程式設計習慣
#模組中的最高端別python語句(沒有縮排的**)會在模組匯入(import)時執行(不論其是否真的必要執行)。
因此,應盡量將模組所有的功能**放到函式中,包括主程式相關的功能**也可以放到main()函式中,主程式本身呼叫main()函式
#可以在模組的main()函式中書寫測試**。在主程式中,檢測name的值,如果為'main'(表示模組是被直接執行),則呼叫main()函式,進行測試;
如果為模組名字(表示模組是被呼叫),則不進行測試
程式設計師的提公升
引用 1.太害怕學不會新的工具 語言和框架 一般的程式設計師會墨守他們最喜歡的工具,而不希望學習新的,因為他們認為,離開了那些語言和工具,多年的經驗就會付諸東流。而強大的程式設計師會擁抱那些挑戰和機會,積極地學習新的工作方式。2.直到特性 完成 的時候才會提交。但永遠都不會完成!他在markedup...
提公升程式設計師效率
筆者工作多年,總結了一些經驗,可以幫助大家成為乙個更加高效的程式設計師。程式設計法則,與設計和工程的原理密切相關。下面這些程式設計法則幫助我讓我獲益匪淺,所以我想分享給大家,希望也能幫助大家更高效,生產出的 更容易維護,並且bug和缺陷更少。dry原則 不要重複 don t repeat yours...
程式設計師的自我提公升
本文分為2個部分 1 優秀程式設計師的定義 2 程式設計師的提公升 程式設計師?什麼是程式設計師,個人的見解是了解至少一門程式語言,利用這門語言在某些場合獲取到金錢。一般地,碼農 黑客 或者架構師等等,只要使用程式語言 優秀程式設計師的定義 若是想要提公升自己,首先要明確乙個方向,然後朝著方向堅定不...