本文目錄一覽:
滿滿乾貨!20個Python使用的小技巧
本節對一些 Python 易混淆的操作進行對比。
1.1 有放回隨機採樣和無放回隨機採樣
1.2 lambda 函數的參數
1.3 copy 和 deepcopy
複製和變數別名結合在一起時,容易混淆:
對別名的修改會影響原變數,(淺)複製中的元素是原列表中元素的別名,而深層複製是遞歸地進行複製,對深層複製的修改不影響原變數。
1.4 == 和 is
1.5 判斷類型
1.6 字元串搜索
1.7 List 後向索引
這個只是習慣問題,前向索引時下標從0開始,如果反向索引也想從0開始可以使用~。
2.1 讀寫 CSV 文件
注意,當 CSV 文件過大時會報錯:_csv.Error: field larger than field limit (131072),通過修改上限解決
csv 還可以讀以 分割的數據
2.2 迭代器工具
itertools 重新定義了很多迭代器工具,例如子序列工具:
序列排序:
多個序列合併:
2.3 計數器
計數器可以統計一個可迭代對象中每個元素出現的次數。
2.4 帶默認值的 Dict
當訪問不存在的 Key 時,defaultdict 會將其設置為某個默認值。
2.5 有序 Dict
3.1 輸出錯誤和警告信息
向標準錯誤輸出信息
輸出警告信息
控制警告消息的輸出
3.2 代碼中測試
有時為了調試,我們想在代碼中加一些代碼,通常是一些 print 語句,可以寫為:
一旦調試結束,通過在命令行執行 -O 選項,會忽略這部分代碼:
3.3 代碼風格檢查
使用 pylint 可以進行不少的代碼風格和語法檢查,能在運行之前發現一些錯誤
3.4 代碼耗時
耗時測試
測試某代碼塊耗時
代碼耗時優化的一些原則
4.1 argmin 和 argmax
argmax同理。
4.2 轉置二維列表
4.3 一維列表展開為二維列表
python調試程序BUG的心得技巧分享
【導讀】相信各位Python工程師們在寫Python代碼的時候,免不了經常會出現bug滿天飛這種情況,這個時候我們可能就得一個標點一個標點的去排查,費時又費力,但是,我們又很難發現到底是其中的哪一個步驟,導致了這些問題的出現。導致這些問題的其中一個原因,就是我們沒有養成良好的編程習慣。編程習慣就好比是電影中的特效。電影特效越好,呈現出來的觀影效果也自然越好。同樣,如果我們能夠養成好的編程習慣,在查找錯誤的時候,自己的思路就會更加清晰。下面是小編整理的解決Python項目bug的心得技巧分享,包含六小點,希望對大家有所幫助。
方法一:使用項目管理工具
無論Python項目簡單與否,我們都應該使用Git進行版本控制。大部分支持Python的IDE(集成開發環境)都內置了對Git這一類項目管理工具的支持。
我們在修改代碼時,常常會出現改著改著程序就崩了的情況,改出的最新版本有時候還不如上一個版本。而Git,恰好能夠及時幫我們保存之前的版本。使用了它以後,我們也不需要不停地用「ctrl+z」來撤回代碼了。
方法二:使用Python的內置函數
Python的內置函數和標準庫都可以處理常見的用例,而不需要自己重新定義函數。
但是,剛剛入門的Python開發人員們對其中的函數並不熟悉。所以他們經常會遇到這樣一個問題——在不需要記住內容的情況下,如何才能知道標準庫中的內容是否涵蓋了自己的用例?最簡單的方法是將標準庫索引和內置函數概述頁添加為書籤,並且在遇到「日常編程」類問題的時候立即瀏覽一下。我們使用這些函數的頻率高了,自然也就能記住這些函數了。
方法三:使用正確的模塊
與內置函數和標準庫一樣,Python中大量的第三方模塊集合,也可以幫助我們節省大量的人力。通過PyPI的Web前端,可以針對我們的問題觸發搜索詞,我們很容易就能找到適合自己的解決方案。
方法四:使用OOP
面向對象編程(OOP)將數據結構與用於操作它們的方法捆綁在一起,從而使編寫高級代碼更加容易。OOP非常適合用於Python這一類高級語言,尤其是項目非常複雜的時候。熟悉Python的開發人員都知道,使用OOP可以減少代碼量,從而節省大量的時間。
但是,也不是所有的項目都需要使用OOP。如果項目沒有特別要求,一些小型的項目就可以不用OOP。
方法五:編寫測試代碼並不斷測試
一個好的程序員一定知道測試之於項目的重要性。編寫測試代碼的確是一個很枯燥的過程,但是不進行測試,我們就無法發現程序的問題所在。
如果一個項目非常複雜的話,我們就必須要做到及時測試。越早測試,就能越早發現問題。而不是說等代碼全部寫完了,才開始進行測試,這樣反而會導致更多的錯誤和更大的工作量。
當然,我們也可以尋找專業的軟體測試人員,來幫助我們進行測試。這樣我們也可以把更多的精力投入到項目程序本身。
方法六:選擇正確的Python版本
部分人仍然在使用Python2,但Python官方的開發團隊早已經不對這一版本進行維護了。聰明的開發人員都已經將Python2里的項目遷移到Python3中了。
Python目前的最新版本是Python3.8.5,但也不是說你一定要使用最新版本。專業的軟體開發人員都知道,任何軟體的最新版本都不一定是最好的,因為它仍需要開發團隊不斷地去改良。程序員一般都會使用在最新版本之前的一個版本,舊版本相對而言是比較成熟的。
無論是運用哪一種語言編寫代碼,優秀的程序員都具備良好的編程習慣。這些習慣不僅能夠讓我們思路更加清晰,也可以幫助我們減輕工作量,從而節省大量的時間。所以,可能你離優秀的程序員,只差一個好習慣了哦~
以上就是小編今天給大家整理髮送的關於「解決Python項目BUG的心得技巧分享」的相關內容,希望對大家有所幫助。小編認為要想在大數據行業有所建樹,需要考取部分含金量高的數據分析師證書,這樣更有核心競爭力與競爭資本。
調試python代碼的方法有哪些
本文討論在沒有方便的IDE工具可用的情況下,使用pdb調試python程序
源碼例子
例如,有模擬稅收計算的程序:
#!/usr/bin/python
def debug_demo(val):
if val = 1600 :
print “level 1”
print 0
elif val = 3500 :
print “level 2”
print (val – 1600) * 0.05
elif val = 6500 :
print “level 3”
print (val – 3500) * 0.10 + (3500-1600) * 0.05
else:
print “level 4”
print (val – 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == “__main__”:
debug_demo(4500)
debug_demo函數計算4500的入賬所需的稅收。
如何調試?
1.加入斷點
在需要插入斷點的地方,加入紅色部分代碼:如果_DEBUG值為True,則在該處開始調試(加入_DEBUG的原因是為了方便打開/關閉調試)。
#!/usr/bin/python
_DEBUG=True
def debug_demo(val):
if _DEBUG == True:
import pdb
pdb.set_trace()
if val = 1600 :
print “level 1”
print 0
elif val = 3500 :
print “level 2”
print (val – 1600) * 0.05
elif val = 6500 :
print “level 3”
print (val – 3500) * 0.10 + (3500-1600) * 0.05
else:
print “level 4”
print (val – 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == “__main__”:
debug_demo(4500)
2.開始運行調試
運行程序./debug_demo.py,得到
/usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
– if val = 1600 :
(Pdb)
– val = 1600 : 指示當前執行的語句,(Pdb)等待你的調試指令. pdb的指令很豐富,輸入h指令可以查看指令的使用方法。下面簡單介紹常用指令:
查看代碼上下文,l(小寫L)
(Pdb) l
2 _DEBUG=True
3 def debug_demo(val):
4 if _DEBUG == True:
5 import pdb
6 pdb.set_trace()
7 – if val = 1600 :
8 print “level 1”
9 print 0
10 elif val = 3500 :
11 print “level 2”
12 print (val – 1600) * 0.05
(Pdb)
左邊是行號,右邊是代碼正文。
監視變數:p 變數名
(Pdb) p val
4500
(Pdb)
單步執行: n
– elif val = 3500 :
(Pdb) l
5 import pdb
6 pdb.set_trace()
7 if val = 1600 :
8 print “level 1”
9 print 0
10 – elif val = 3500 :
11 print “level 2”
12 print (val – 1600) * 0.05
13 elif val = 6500 :
14 print “level 3”
15 print (val – 3500) * 0.10 + (3500-1600) * 0.05
加入斷點:b 行號
(Pdb) b 14
運行到斷點: c
(Pdb) c
/*****
– print “level 3”
(Pdb) l
9 print 0
10 elif val = 3500 :
11 print “level 2”
12 print (val – 1600) * 0.05
13 elif val = 6500 :
14 B- print “level 3”
15 print (val – 3500) * 0.10 + (3500-1600) * 0.05
16 else:
17 print “level 4”
18 print (val – 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
19
執行到函數返回前: r
(Pdb) r
level 3
195.0
–Return–
/****()
-None
– print (val – 3500) * 0.10 + (3500-1600) * 0.05
(Pdb)
說明:
pdb還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 命令。就可以得到命令的詳細幫助。
不過,我個人認為一般無需啟動這種調試方法,一般使用日誌輸出進行調試即可,除非遇到了非常微妙的錯誤。這時,單步調試的威力便顯示出來了
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127413.html