(數據科學學習手札159)使用ruff對Python代碼進行自動美化

本文示例代碼已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  大家好我是費老師,在日常編寫Python代碼的過程中,由於個人經驗及編程習慣上的差異,有些人寫出的代碼可讀性很高,一眼看上去就非常整潔易懂,而有些人寫出的代碼則十分“潦草隨意”,讀起來頗爲費勁。

  想要寫出格式工整、可讀性強的Python代碼,除了需要在編寫大量代碼的過程中逐漸養成良好習慣外,還可以結合代碼格式化工具實現代碼的自動格式美化,經典的Python代碼格式化工具有autopep8blackyapf等,均可在vscodepycharm等主流ide中安裝相關插件進行快捷使用。

  而去年大火的代碼靜態分析工具ruff,主要功能中也包含了代碼格式化功能,由於其底層基於rust編寫,因此執行相關功能時的運算速度超快,據官方稱可達到其他同類型工具的10~100倍之多⚡,今天的文章中,費老師我就將爲大家介紹基於ruff的代碼格式化常用功能😉。

2 使用ruff進行Python代碼格式化

2.1 ruff的安裝

  在主流的ide中,我們可以直接安裝ruff相關插件,以vscode爲例,在拓展中搜索ruff進行安裝即可:

2.2 ruff代碼格式化常用功能

2.2.1 直接使用

  默認條件下,安裝完ruff插件後,在vscode中就可以直接使用快捷鍵shift+alt+f,針對當前編輯中的py文件進行格式美化,舉個例子,假設我們原始的Python代碼格式“一不小心”寫成了下面的💩樣子:

import os
# 提取目標路徑下各文件的創建時間及最近修改時間
target_path ="target_path"
# 需要排除的文件拓展名
ignore_file_types =['.mp4','.avi', '.rmvb' 
                   ]
# 結果元組格式:(文件名,創建時間,最近修改時間)
files=[(file,os.path.getctime(os.path.join(target_path,file)),os.path.getmtime(
    os.path.join(target_path,file) )) for file in os.listdir(target_path)
# 判斷當前文件名是否爲文件,且不在排除拓展名列表中
if os.path.isfile(os.path.join(target_path, file)) and 
not any(file.endswith(ext) for ext in ignore_file_types
                                                               )]

  在按下快捷鍵shift+alt+f後,心情頓時舒暢了~

2.2.2 配置格式化規則

  ruff默認的格式化規則基本上兼容black,但如果你想要自定義調整部分的格式化規則,譬如在引號的使用上,你更傾向於使用單引號,在ruff中也可以很輕鬆的實現。

  ruff中推薦以具體的項目爲控制範圍,通過在項目根目錄中創建pyproject.tomlruff.toml來編寫具體的規則,譬如在下面的示例ruff.toml文件中,我們聲明瞭優先使用單引號

ruff.toml

[format]
# 使用單引號
quote-style = "single"

  格式化結果中就會對應的優先使用單引號:

  或是限制每行最多字符數量

ruff.toml

# 限制每行最多20個字符
line-length = 20

[format]
# 使用單引號
quote-style = "single"

  設置縮進使用單個Tab符(默認爲4個空格):

ruff.toml

[format]
# 使用單引號
quote-style = "single"
# 縮進使用單個tab
indent-style = "tab"

  且ruff還支持對docstring註釋中的代碼片段進行識別並格式化:

ruff.toml

[format]
# 使用單引號
quote-style = "single"
# 啓用docstring代碼片段格式化
docstring-code-format = true

  更多有關ruff代碼格式化功能的細節,請移步https://docs.astral.sh/ruff/formatter/瞭解更多。


  以上就是本文的全部內容,歡迎在評論區與我們進行討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章