日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

分享8点超级有用的Python编程建议

發布時間:2025/3/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享8点超级有用的Python编程建议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 項目文件事先做好歸檔

每次開始一個新工作的時候,以前的我總是貪圖方便,Code、Data、文檔都集中放在一個文件夾內,看起來很亂,一度讓回溯過程十分痛苦,或者是換了部電腦,文件全都運行不行了,需要自行修改路徑,十分痛苦。

經過自己一番探索,大家可以大致將項目分成幾個子文件夾,code放在主文件夾里:

2. 永遠不要手動修改源數據并且做好備份
我們需要對源數據進行好備份,方便我們下一次進行回溯,可以進行下一步的操作或者是對中間步驟的修改,而且,對代碼等其他文件也是需要做好備份的,以免出現意外丟失。

這里來自良許Linux 的一篇文章,推薦了4個工具:

  • Git版本控制系統

  • Rsync文件備份

  • Dropbox云存儲

  • Time Machine時光機器

更多的工具介紹和使用我這邊就不展開,大家可以去自行了解唄。

3. 做好路徑的正確配置

很多同學在寫路徑的時候都很喜歡直接用絕對路徑,雖然一般情況下不會有什么問題,但如果代碼共享給其他人學習或者運行的時候,問題就來了,很多情況下都不能直接跑通,

這里建議:

使用相對路徑:腳本位于主目錄下,其他資源(如數據、第三方包等)在其同級或低級目錄下,如 ./data/processed/test1.csv

全局路徑配置變量:

# 設置主目錄 HOME_PATH = r'E:ML90615- PROJECT1' # 讀取數據 data = open(HOME_PATH+'/data/processed/test1.csv') data = pd.read_csv(data) data.head()

4. 代碼必要的地方做好備注與說明

這個我相信大多數人都感同身受了,不信?拿回一個月前自己寫的代碼看看吧,看一下能看懂多少(如果沒有做好備注說明的話)

5. 加速你的Python循環代碼

這里推薦 的一篇文章:24式加速你的python

收藏起來,多看多幾次,養成好習慣唄,這樣子你寫代碼才會越來越快~

6. 可視化你的循環代碼進度

這里介紹一個Python庫,tqdm,先安裝一下:pip install tqdm

這個是一個可以顯示循環進度的庫,有了它就可以更加運籌帷幄了。

大家可以看下面的例子:

7. 使用高效的異常捕獲工具

異常bug定位,以前的我經常也是一條print()函數走到底,雖然說也沒什么問題,但效率上還是會比較慢,后來發現了一個叫PySnooper的裝飾器,仿佛發現了新大陸。

我們一般debug,都是在我們可能覺得會有問題的地方,去打印輸出,看下實際輸出了什么,然后思考問題所在,這需要我們去改code,非常細致地改,相比較直接加個裝飾器,是十分麻煩的。

大家可以看看Example:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import pysnooper@pysnooper.snoop('./file.log') def number_to_bits(number):if number:bits = []while number:number, remainder = divmod(number, 2)bits.insert(0, remainder)return bitselse:return [0]number_to_bits(6)

我們把函數每一步的輸出都保存為file.log,我們可以直接去看到底哪里出了問題。

項目地址:https://github.com/cool-RR/pysnooper

8. 要多考慮代碼健壯性

何為代碼的健壯性,顧名思義,就是可以抵擋得住各種異常場景的測試,異常處理工作由“捕獲”和“拋出”兩部分組成?!安东@”指的是使用 try … except 包裹特定語句,妥當的完成錯誤流程處理。而恰當的使用 raise 主動“拋出”異常,更是優雅代碼里必不可少的組成部分,下面總結幾點供大家參考:

1)知道要傳入的參數是什么,類型,個數 (異常處理,邏輯判斷)

def add(a, b):if isinstance(a, int) and isinstance(b, int):return a+belse:return '參數類型錯誤'print(add(1, 2)) print(add(1, 'a'))

2)只做最精準的異常捕獲

我們有的時候想著讓腳本work才是王道,所以不管三七二十一就搞一個大大的try…except把整塊代碼包裹起來,但這樣很容易把原本該被拋出的 AttibuteError 吞噬了。從而給我們的 debug 過程增加了不必要的麻煩。

所以,我們永遠只捕獲那些可能會拋出異常的語句塊,而且盡量只捕獲精確的異常類型,而不是模糊的 Exception。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from requests.exceptions import RequestExceptiondef save_website_title(url, filename):try:resp = requests.get(url)except RequestException as e:print(f'save failed: unable to get page content: {e}')return False# 這段正則操作本身就是不應該拋出異常的,所以我們沒必要使用 try 語句塊 # 假如 group 被誤打成了 grop 也沒關系,程序馬上就會通過 AttributeError 來 # 告訴我們。 obj = re.search(r'<title>(.*)</title>', resp.text) if not obj:print('save failed: title tag not found in page content')return False title = obj.group(1)try:with open(filename, 'w') as fp:fp.write(title) except IOError as e:print(f'save failed: unable to write to file {filename}: {e}')return False else:return True

3)異常處理不應該喧賓奪主

像上一條說到的異常捕獲要精準,但如果每一個都很精準的話,其實我們的代碼里就會有很多try…except語句塊,以至于擾亂核心代碼,代碼整體閱讀性。

這里,我們可以利用上下文管理器來改善我們的異常處理流程,簡化重復的異常處理邏輯。

class raise_api_error: """captures specified exception and raise ApiErrorCode instead :raises: AttributeError if code_name is not valid """ def __init__(self, captures, code_name):self.captures = capturesself.code = getattr(error_codes, code_name)def __enter__(self):# 該方法將在進入上下文時調用return selfdef __exit__(self, exc_type, exc_val, exc_tb):# 該方法將在退出上下文時調用# exc_type, exc_val, exc_tb 分別表示該上下文內拋出的# 異常類型、異常值、錯誤棧if exc_type is None:return Falseif exc_type == self.captures:raise self.code from exc_valreturn False

在上面的代碼里,我們定義了一個名為 raise_api_error 的上下文管理器,它在進入上下文時什么也不做。但是在退出上下文時,會判斷當前上下文中是否拋出了類型為 self.captures 的異常,如果有,就用 APIErrorCode 異常類替代它。

使用上下文管理器后,簡潔的代碼如下:

def upload_avatar(request):"""用戶上傳新頭像""" with raise_api_error(KeyError, 'AVATAR_FILE_NOT_PROVIDED'):avatar_file = request.FILES['avatar']with raise_api_error(ResizeAvatarError, 'AVATAR_FILE_INVALID'),raise_api_error(FileTooLargeError, 'AVATAR_FILE_TOO_LARGE'):resized_avatar_file = resize_avatar(avatar_file)with raise_api_error(Exception, 'INTERNAL_SERVER_ERROR'):request.user.avatar = resized_avatar_filerequest.user.save() return HttpResponse({})

總結

以上是生活随笔為你收集整理的分享8点超级有用的Python编程建议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美黑人一区二区三区 | 国语对白做受 | 午夜不卡视频 | 一级做a在线观看 | 日韩精品二区在线观看 | 美国一级大黄一片免费中文 | 91视频影院 | 精品国产一区二区不卡 | 日韩青青草 | 致命弯道8在线观看免费高清完整 | 中日韩在线视频 | 亚洲七区 | 成人综合区一区 | 久色综 | 亚洲人成在线播放 | 丰满女人又爽又紧又丰满 | 91爱啪啪 | 91小宝寻花一区二区三区 | 青草青视频 | 日本在线一本 | 黄三级| 97精品一区二区三区 | 国产手机av | 中文字幕 自拍偷拍 | 四虎成人影视 | 香蕉视频日本 | 欧美性猛片aaaaaaa做受 | 未满十八岁禁止进入 | 国产精品人八做人人女人a级刘 | 日韩污视频在线观看 | 国产精品久久中文字幕 | 成人影片在线 | 欧美性大战久久久久久久 | 日本免费网站在线观看 | 日本高清网色 | 日本中文字幕免费 | 国产av无码专区亚洲精品 | 亚洲字幕成人中文在线观看 | 成人在线免费网址 | 四虎影院在线观看免费 | 久久久久久欧美精品se一二三四 | 国产高中女学生第一次 | 亚洲综合免费 | 色姐| 欧美日韩小视频 | 99久久精品一区二区成人 | 综合网伊人 | 日韩久久久久久 | 久久影视一区 | 91精品人妻一区二区三区果冻 | 婷婷五月在线视频 | 成人深夜福利 | 老地方在线观看免费动漫 | 波多野结衣av在线观看 | 亚洲精品国产精品国自产 | 欧美激情第五页 | 国产精品普通话 | 一区二区视频网 | 中文字幕日韩无 | 亚洲熟妇一区 | 日韩精品1 | 一区在线视频 | 中文字幕第9页 | 黄色av毛片| 亚洲天堂免费看 | 波多野结衣有码 | 日本福利一区 | 无码精品人妻一区二区三区湄公河 | 久久片 | 免费荫蒂添的好舒服视频 | 朝桐光在线播放 | 五月婷婷丁香久久 | 极品少妇av | 亚洲人视频在线观看 | 国产精品亚洲欧美在线播放 | www.猫咪av | 熟女少妇一区二区 | 白浆影院 | 亚洲高清色图 | 女女高潮h冰块play失禁百合 | 成人短视频在线免费观看 | 伦在线| 双性懵懂美人被强制调教 | 久久69| 国产精品毛片在线 | 欧美成人一区在线 | 黑人玩弄人妻一区二区三区影院 | 日本免费视频 | 久久久新| 播播成人网 | 拔插拔插影库 | 啪啪天堂 | 人人干人 | 精品不卡视频 | 中文字幕看片 | 九一国产在线观看 | 在线观看av黄色 | 尹人综合网 | 波多野结衣免费观看视频 |