Python包管理與程式碼整潔之道

前言

在上一篇《Python環境搭建及PyCharm破解使用技巧》中,我們介紹了:

Python介紹:簡介、優缺點、使用場景

Python安裝與配置:Windows、Mac、Linux下安裝與環境變數配置

PyCharm破解及使用:PyCharm破解步驟、PyCharm常見使用配置技巧

Python多版本多環境解決方案:pyenv與venv建立虛擬環境

本篇文章將重點介紹Python的包管理規範以及如何編寫優雅的PythonIC程式碼。

統一的程式設計規範為什麼重要?

統一的程式設計規範能提高開發效率。而開發效率,關乎三類物件: 閱讀者、程式設計者和機器。

優先順序是閱讀者的體驗 >> 程式設計者的體驗 >> 機器的體驗。

一、Python包管理工具-pip

pip官網: https://pypi。org/project/pip/

1。pip常用命令

pip ——version/-V 檢視pip版本pip install xxx 安裝xxx包,預設下載最新版本,pip install xxx==2。0。0 下載安裝指定版本pip download xxx 下載安裝包,不安裝pip uninstall xxx 解除安裝包pip list 檢視當前系統所有已安裝的包pip list -o 檢視已安裝的包中可以升級的包列表pip search xxx 搜尋下載源中是否存在指定的包pip show xxx 檢視包資訊,如版本、依賴資訊pip install ——upgrade pip 升級pip

2。pip更改安裝映象源

pip常用的國內映象源

清華:https://pypi。tuna。tsinghua。edu。cn/simple

阿里雲:http://mirrors。aliyun。com/pypi/simple/

中國科技大學 https://pypi。mirrors。ustc。edu。cn/simple/

華中理工大學:http://pypi。hustunique。com/

山東理工大學:http://pypi。sdutlinux。org/

豆瓣:

http://pypi。douban。com/simple/

pip指定臨時下載源

pip install -i https://pypi。tuna。tsinghua。edu。cn/simple(映象地址) pyspider(模組名稱)

pip永久指定下載源

方法一:透過本地檔案方式

編輯本地pip。ini檔案,填寫如下內容:

Python包管理與程式碼整潔之道

方法二:透過命令列方式

pip config set global。index-url https://mirrors。aliyun。com/pypi/simple/

執行完上述命令,其實也是往pip。ini檔案中插入了方式一種的配置內容。

3。pip配置相關

檢視映象源配置

pip config list # 檢視映象源

Python包管理與程式碼整潔之道

檢視詳細配置

pip config list -v # 檢視詳細配置

Python包管理與程式碼整潔之道

在命令列透過呼叫記事本方式快速開啟pip配置檔案

pip config edit ——editor notepad

鍵入命令後會自動開啟記事本

Python包管理與程式碼整潔之道

4。pip包管理

檢視已安裝包列表

pip list installed

Python包管理與程式碼整潔之道

快速匯出當前python環境下所有已安裝的依賴包列表到指定檔案

pip freeze > requirements。txttype requirements。txt # 檢視檔案內容,類似於cat命令

Python包管理與程式碼整潔之道

指定檔案,批次下載到當前目錄

pip download -r requirements。txt -d 。

Python包管理與程式碼整潔之道

檢視下載後的本地檔案

Python包管理與程式碼整潔之道

二、Python常用編碼規範

1。Python常用編碼規範型別

PEP 8

PEP 8 可以算是 Python 官方的標準編碼規範。它是用於規範 Python 主發行版中的標準庫的程式碼。所以這個編碼規範是值得一看。

文件地址:https://www。python。org/dev/peps/pep-0008/

如何參照 PEP 8 編寫漂亮的 Python 程式碼:https://realpython。com/python-pep8/

Google 的 Python 風格指南

Google 的 Python 風格也是遵循 PEP8 規範。

文件地址:http://zh-google-styleguide。readthedocs。io/en/latest/google-python-styleguide/contents/

Pocoo 風格指南

Pocoo 團隊編碼風格指南嚴格遵循了 PEP8 的要求,但略有一些不同之處,並進行了一定的擴充套件延伸。

文件地址:http://dormousehole。readthedocs。io/en/latest/styleguide。html

2。PEP 8 規範

使用pycharm內建的PEP 8

使用pycharm內建的PEP8檢測器,能夠自動對編碼不規範的地方進行檢查、指出錯誤,並推薦修改方式。具體位置見:Settings-Editor-Inspections-Python

Python包管理與程式碼整潔之道

使用第三方PEP8工具Autopep8

autopep8是一個命令列小工具,可以對某個檔案進行程式碼格式化。

① 安裝

pip install autopep8

② 程式碼格式化

autopep8 ——in-place ——aggressive ——aggressive

執行透過上述命令後,會自動對指定檔案的編碼風格進行格式化。

匯入第三方工具autopep8到pycharm

① 匯入autopep8到pycharm

Settings-Tools-External Tools,點選+號新建立一個tool,按照如下進行填寫,其中:

Name:工具名稱,任意,取名autopep8即可;

Group:所屬組織,保持預設;

Description:工具描述,任意;

Program:autopep8的檔案路徑,在使用pip安裝了autopep8後,檔案路徑為當前環境的Scripts/autopep8。exe,開啟右邊的資料夾選擇autopep8。exe檔案即可;

Arguments:引數,填寫:——in-place ——aggressive ——aggressive $FilePath$

Working directory:工作目錄,填寫:$ProjectFileDir$

Python包管理與程式碼整潔之道

匯入完成後:

Python包管理與程式碼整潔之道

② 格式化程式碼

pycharm中編碼後,使用匯入的autopep8工具對程式碼進行格式化

Python包管理與程式碼整潔之道

③ 格式化前後的內容對比

# 格式化前a=1b=3c=‘python’# 格式化後a = 1b = 3c = ‘python’

三、程式碼整潔之道:編寫PythonIC程式碼

1。python之禪:19條指導原則

優美勝於醜陋;

明瞭勝於晦澀;

簡單勝於複雜;

複雜勝於晦澀;

扁平勝於巢狀;

間隔勝於緊湊;

可讀性很重要;

特例不足以特殊到違背這些原則;

實用性勝過純粹;

永遠不要默默地忽視錯誤;

除非需要明確需要這樣做;

面對模稜兩可,拒絕猜測;

解決問題最直接的方法應該有一種,最好只有一種;

當然這是沒法一蹴而就的,除非你是荷蘭人;

做也許好過不做;

但不想就做還不如不做;

如果方案難以描述明白,那麼一定是個糟糕的方案;

如果實現容易描述,那可能是個好方案;

名稱空間是一種絕妙的理念,多加利用!

透過python命令列import this檢視Pythonic(python之禪)

Python包管理與程式碼整潔之道

優美勝於醜陋

Python 具有語法簡單、程式碼可讀性強和命令類似英語等特點,這讓編寫 Python 程式碼比使用其他程式語言更容易、更高效。如下使用or and和|| &&構建語義相同的表示式:

示例:

# &&, ||if a == 0 && b == 1 || c == True:# and, orif a == 0 and b == 1 or c == True:# 這兩個邏輯表示式在 Python 中是相同的# 從語義的角度來看,可以使用選擇運算子來構造完全相同的表示式。

明瞭勝於晦澀

在 Python 中,良好的命名約定能讓你的程式碼更清晰明瞭。一般來說,避免使用以下名稱:

✓ 太寬泛,如my_list;

✓ 太冗長,如list_of_machine_learning_data_set;

✓ 太模糊,如“1”、“I”、“o”、“O”。

✓ Python包、模組名應該全部小寫。

✓ 當需要使用多個單詞時,使用下劃線分割它們。

✓ 類名應遵循 UpperCaseCamelCase規範

✓ 變數、方法、函式應該採用小寫(如果需要,用下劃線分割)

✓ 常量名必須全大寫(如果需要,用下劃線分割)

簡單勝於複雜

很多時候,在處理迭代器時,我們還需要儲存迭代計數,Python 透過提供一個名為enumerate()的內建函式簡化這一任務。以下是一種不成熟的方法和推薦方法:

示例:

words = [‘A’, ‘B’, ‘C’]# 不成熟的方法index = 0for word in words: print(index, word) index += 1# 推薦方法for index, word in enumerate(words): print(index, word)

2。Python常用編碼規範說明

編碼

◆ 如無特殊情況, 檔案一律使用 UTF-8 編碼

◆ 如無特殊情況, 檔案頭部必須加入#-*-coding:utf-8-*-標識

縮排

◆ 統一使用 4 個空格進行縮排,不建議使用TAB, 更不要TAB和空格混用。

引號

◆ 自然語言使用雙引號,例如:u“你好世界”

◆ 機器標識使用單引號,例如dict裡的key。

◆ 正則表示式 使用原生的雙引號 r“。。。”

◆ 文件字串 (docstring) 使用三個雙引號 “”“……”“”

空行

◆ 編碼格式宣告、模組匯入、常量和全域性變數宣告、頂級定義和執行程式碼之間空兩行

◆ 頂級定義之間空兩行,方法定義之間空一行

◆ 在函式或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行

文件編排

模組內容的順序:模組說明和docstring—import—globals&constants—其他定義。其中import部分,又按標準、三方和自己編寫順序依次排放,之間空一行。

◆ 不要在一句import中多個庫,比如import os, sys不推薦。

命名規範

✓ 模組儘量使用小寫命名,首字母保持小寫,儘量不要用下劃線

✓ 類名使用駝峰(CamelCase)命名風格,首字母大寫,私有類可用一個下劃線開頭

✓ 函式名一律小寫,如有多個單詞,用下劃線隔開

✓ 私有函式可用一個下劃線開頭

✓ 變數名儘量小寫, 如有多個單詞,用下劃線隔開

✓ 常量採用全大寫,如有多個單詞,使用下劃線隔開

變數

使用小寫字母命名函式和變數,並用下劃線分隔單詞,提高程式碼可讀性。

示例:

◆ name = “Python” #變數名

◆ job_title = “Software Engineer” #帶有下劃線的變數名

◆ populated_countries_list = [] #帶有下劃線的變數名

◆ _books = {} # 變數名私有化

◆ __dict = [] # 防止python內建庫中的名稱混淆

函式

函式的宣告和變數一樣也是透過小寫字母和單下劃線進行連線,對於函式私有化也是和宣告變數類似。

def get_data(): pass

函式的開頭使用單下劃線,將其進行私有化

def _get_data(): pass

對於使用 Pyton 中的關鍵字來進行命名的函式要使用雙下劃線。

def __path(): pass

類的命名規範

類的名稱應該像大多數其他語言一樣使用駝峰大小寫。

class UserInformation: def get_user(id): db = get_db_connection() user = execute_query_for_user(id) return user

常量的命名規範

通常應該用大寫字母定義常量名稱

◆ TOTAL = 56

◆ TIMOUT = 6

◆ MAX_OVERFLOW = 7

程式碼編排

✓ 縮排。4個空格的縮排(編輯器都可以完成此功能),不要使用TAB,更不能混合使用TAB和空格。

✓ 每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在運算子的後邊敲回車。

✓ 類和top-level函式定義之間空兩行;類中的方法定義之間空一行;函式內邏輯無關段落之間空一行;其他地方儘量不要再空行。

空格的使用

◆ 總體原則,避免不必要的空格,

◆ 各種右括號前不要加空格。

◆ 逗號、冒號、分號前不要加空格。

◆ 函式的左括號前不要加空格。如Func(1)。

◆ 序列的左括號前不要加空格。如list[2]。

◆ 運算子左右各加一個空格,不要為了對齊增加空格。

◆ 函式預設引數的賦值符左右省略空格。

◆ 不要將多句語句寫在同一行,儘管使用‘;’允許。

◆ if/for/while語句中,即使執行語句只有一句,也必須另起一行。

註釋及文件字串

總體原則,錯誤的註釋不如沒有註釋。所以當一段程式碼發生變化時,第一件事就是要修改註釋!

註釋必須使用英文,最好是完整的句子,首字母大寫,句後要有結束符,結束符後跟兩個空格,開始下一句。如果是短語,可以省略結束符。

◆ 塊註釋,在一段程式碼前增加的註釋。在‘#’後加一空格。段落之間以只有‘#’的行間隔。

◆ 行註釋,在一句程式碼後加註釋。比如:x = x + 1 # Increment x,但是這種方式儘量少使用。

3。Docstrings的使用

Docstrings可以在 Python 中宣告程式碼的功能的,通常在方法,類和模組的開頭使用,並且docstring是該物件的

__doc__特殊屬性,一般採用“三重雙引號”,下面列舉在 Python 程式碼中編寫 docstrings 的一些最佳實踐 。

方法中使用docstring

def get_prime_number(): “”“Get list of prime numbers between 1 to 100。”“”“

✓ 即使字串只有一行,也使用三重引號。

✓ 三重引號中的字串前後不應有任何空行

✓ 使用句點(。)結束docstring中的語句

多行的docstring

def call_weather_api(url, location): ”“”Get the weather of specific location。 Calling weather api to check for weather by using weather api and location。 Make sure you provide city name only, country and county names won‘t be accepted and will throw exception if not found the city name。 :param url:URL of the api to get weather。 :type url: str :param location:Location of the city to get the weather。 :type location: str :return: Give the weather information of given location。 :rtype: str“”“

✓ 第一行是函式或類的簡要描述

✓ 每一行語句的末尾有一個句號

✓ 文件字串中的簡要描述和摘要之間有一行空白

模組級別的docstring

一般在檔案的頂部放置一個模組級的 docstring 來簡要描述模組的使用,這些註釋應該放在在導包之前,模組文件字串應該表明模組的使用方法和功能。

”“”This module contains all of the network related requests。 This module will check for all the exceptions while making the network calls and raise exceptions for any unknown exception。Make sure that when you use this module,you handle these exceptions in client code as:NetworkError exception for network calls。NetworkNotFound exception if network not found。“”“import urllib3import json

類級別的docstring

類docstring主要用於簡要描述類的使用及其總體功能,下面列舉如何編寫類文件字串。

單行類docstring

class Student: ”“”This class handle actions performed by a student。“”“ def __init__(self): pass

多行類docstring

class Student: ”“”Student class information。 This class handle actions performed by a student。 This class provides information about student full name, age, roll-number and other information。 Usage: import student student = student。Student() student。get_name() “”“ def __init__(self): pass

小結

以上就是本篇文章的全部內容,下面作一個簡單總結:

Python包管理工具pip使用:更改映象源、配置相關、批次匯出/安裝包;

Python常用編碼規範:常見編碼規範型別、PEP8規範以及如何使用pycharm內建的PEP8、pycharm中匯入第三方PEP8工具autopep8;

編寫PythonIC程式碼:Python之禪的19條指導原則、常用編碼規範說明(編碼&縮排&引號&空行等的使用,以及變數&函式&類&常量等的命名規範)