最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

高質(zhì)量Python代碼編寫的5個優(yōu)化技巧

 更新時間:2017年11月16日 09:14:21   作者:Michael Washburn Jr.  
這篇文章主要為大家詳細介紹了編寫高質(zhì)量Python代碼的5個優(yōu)化技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下

如今我使用 Python 已經(jīng)很長時間了,但當我回顧之前寫的一些代碼時,有時候會感到很沮喪。例如,最早使用 Python 時,我寫了一個名為 Sudoku 的游戲(GitHub地址:https://github.com/MichaelWashburnJr/PythonSudoku)。這個游戲在當時算是我比較拿得出手的項目了。然而現(xiàn)在,我無法直接復制其代碼并運行它,具體原因是我當時編碼時沒有添加一個setup.py 或者 requires.txt 文件,當然,這種錯誤我肯定不會再犯!

由此,我總結(jié)了多年來自己所編寫的 Python 代碼的質(zhì)量變化過程。它們變得更加簡潔、健壯、易讀。但是什么原因使得 Python 代碼變得更好呢?

在本文中筆者將與大家共同探討一些 Python 代碼的優(yōu)化手段,或大或小。希望以此幫助你提高 Python 代碼的質(zhì)量。當然,這些方式也可以適用于其他編程語言和技術(shù)。

1. 將代碼設置為可通過 PIP 安裝的軟件包

當你想要使用一個新的 Python 包時,如果可以使用 “pip install”命令跟上包名或者包的位置來安裝的話,就會非常方便。

有很多方法可以實現(xiàn)這一點,我的“go to”項目實現(xiàn)方法是創(chuàng)建一個 setup.py 文件。

假設我們在“flask_example.py”中有一個簡單的 Flask 程序:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
  return 'Hello, World!'

def main():
  app.run()

if __name__ == ‘__main__':
  main()

我們可以將其設置為一個可安裝的 Python 包。方法是:首先把它移動到一個單獨的文件夾中(我們稱之為“flask_example /”),然后在項目根文件夾中創(chuàng)建一個如下所示的setup.py 文件:

from distutils.core import setup

setup(
  name='flask_example',
  version='1.0',
  description='Hello, World! in flask.',
  packages=['flask_example'],
  install_requires=[
    'Flask==0.12.2'
  ],
  entry_points = {
    'console_scripts': 'runserver=flask_example.flask_example:main'
  }
)

這樣做可以帶來一系列優(yōu)點。 首先,你可以使用“pip install -e”在本地安裝你的應用程序。這樣,開發(fā)人員可以輕松克隆和安裝項目,因為 setup.py 文件將會處理掉所有繁重的工作。

其次,使用 setup.py 文件來進行依賴關(guān)系管理。install_requires 變量能夠定義要使用的軟件包以及版本。如果你不確定使用的軟件包名稱和版本,可以運行“pip freeze”來查看它們。

最后,它可以為你的程序包定義入口點,通過簡單運行“runserver”即可在命令行中執(zhí)行代碼。

2. 借助 linter 工具捕獲代碼錯誤

使用 linter(語法檢查)可以自動修復代碼的語法問題。PyLint 是一款強大的 Python 版本的 linter 工具,如果你使用類似 Git 這樣的版本控制系統(tǒng),可以在提交代碼之前讓 Git 通過一個 linter 運行代碼來解決語法問題。

首先需要安裝 PyLint 軟件包:

pip install pylint

然后,將以下代碼添加到.git/hooks/pre-commit。如果你已經(jīng)有一個 pre-commit hook,那么只需將 pylint 命令附加到文件的末尾即可。

#!/bin/sh
pylint <your_package_name>

這樣做之后就可以在代碼提交到 Git 存儲庫之前自動捕獲各種錯誤。除了語法錯誤之外,它還能捕捉一些其他的 linter 工具能夠捕捉到的常見錯誤。

3. 盡量使用絕對路徑導入而不是相對路徑

在 Python 中,使用相對路徑導入模塊的情況很少(例如 from . import  <模塊名>)。如果你已經(jīng)為 Python 項目創(chuàng)建一個 setup.py(或者使用其他類似的機制)文件,那么你可以簡單地通過模塊的完整路徑引用其子模塊。

PEP-8(Python風格指南) 推崇絕對路徑導入。這樣的話包名更加直觀,根據(jù) Python 軟件基金會的說法就是“更規(guī)范”。

使用相對路徑的做法很快就會變成一場噩夢。早期的時候可能沒有問題,但是一旦你改名了模塊路徑或者進行重大的重構(gòu)之后,它真的會讓你很頭痛。

4. 上下文管理(with 關(guān)鍵字)

無論何時打開文件、流或者連接,你通常都會使用上下文管理器。上下文管理器很有用,它能夠處理文件的關(guān)閉并拋出異常。Python 中使用 with 關(guān)鍵字可以很好的實現(xiàn)該功能。

大多數(shù) Python 初學者可能會使用如下方式寫入文件:

f = open(‘newfile.txt', ‘w')
f.write(‘Hello, World!')
f.close()

這樣做很簡單,但是想象一下這種情況:假設你在文件中寫入了數(shù)千行,不幸的是突然拋出異常,你的文件并未正確關(guān)閉,此時你已經(jīng)寫入文件的所有數(shù)據(jù)都會損壞或者丟失。

不用擔心,通過一些簡單的重構(gòu),即使遇到異常我們也可以確保文件正常關(guān)閉。我們可以這樣做:

with open(‘file', ‘w') as file:
  file.write(‘Hello, World!')

非常簡單!并且代碼變得更加簡潔。你還可以使用單個“with”語句打開多個上下文管理器,而無需嵌套多個“with”語句。

with open(‘file1', ‘w') as f1, open(‘file2', ‘w') as f2:
  f1.write(‘Hello')
  f2.write(‘World')

5. 使用直觀、貼切的函數(shù)和變量名

在 Python 中,很容易對函數(shù)和返回值產(chǎn)生疑惑。特別是當你調(diào)用某些庫里的函數(shù)時。如果你能夠避免開發(fā)者通過查詢文檔才能得知函數(shù)功能,這樣的時間節(jié)省將是一個非常有價值的改進。如何做到呢?如何改變一些簡單的變量名稱來節(jié)省開發(fā)時間呢?

在命名函數(shù)或變量名時,我會著重考慮3點:

  • 函數(shù)或變量的功能
  • 與函數(shù)或變量相關(guān)聯(lián)的單位
  • 函數(shù)或變量計算的數(shù)據(jù)類型

例如,如果我想創(chuàng)建一個函數(shù)來計算一個矩形的面積,我將函數(shù)命名為“calc_rect_area”。但這并沒有給用戶提供足夠的信息。函數(shù)會返回值嗎?還是將值存儲在其他某個地方?返回值的單位是英尺還是米呢?

為了使函數(shù)名提供更多信息,我將其修改為“get_rect_area_sq_ft”。這使得用戶清楚地知道該函數(shù)獲取并返回面積,并且單位是英尺。

如果你使用一些更加友好的函數(shù)和變量名為開發(fā)人員節(jié)省5分鐘,這些時間累積起來將大大提升開發(fā)者的效率。

總結(jié)

這些方法是我多年使用 Python 編程所積累的經(jīng)驗。有些是我自己的總結(jié),有些來自他人的指點。我希望上述建議能夠助你寫出更好的 Python 代碼。

作者丨Michael Washburn Jr.
譯者丨安翔

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼

    Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼

    這篇文章主要介紹了Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Pandas通過index選擇并獲取行和列

    Pandas通過index選擇并獲取行和列

    本文主要介紹了Pandas通過index選擇并獲取行和列,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能

    PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能

    這篇文章主要介紹了PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 教你如何利用Python批量翻譯英文Word文檔并保留格式

    教你如何利用Python批量翻譯英文Word文檔并保留格式

    本文將給大家分享一個實用的Python辦公自動化腳本 利用Python批量翻譯英文Word文檔并保留格式,最終效果甚至比部分收費的軟件還要好!文中有非常詳細的代碼示例.需要的朋友可以參考下
    2021-05-05
  • Python配置pip國內(nèi)鏡像源的實現(xiàn)

    Python配置pip國內(nèi)鏡像源的實現(xiàn)

    這篇文章主要介紹了Python配置pip國內(nèi)鏡像源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • python os庫使用示例教程

    python os庫使用示例教程

    這篇文章主要介紹了python os庫使用示例教程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • python如何實現(xiàn)圖片壓縮

    python如何實現(xiàn)圖片壓縮

    這篇文章主要介紹了python如何實現(xiàn)圖片壓縮,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • python如何在word中存儲本地圖片

    python如何在word中存儲本地圖片

    這篇文章主要介紹了python如何在word中存儲本地圖片,想了解docx模塊的同學,可以參考下
    2021-04-04
  • Pygame?精準檢測圖像碰撞的問題

    Pygame?精準檢測圖像碰撞的問題

    這篇文章主要介紹了Pygame?精準檢測圖像碰撞,在用Pygame寫游戲的時候,有人可能會遇到兩個Rect對象碰撞但是對象之間還有空間間隔的問題,這里,將教大家用一種方法精準地檢測圖像碰撞,需要的朋友可以參考下
    2022-06-06
  • python實現(xiàn)批量提取指定文件夾下同類型文件

    python實現(xiàn)批量提取指定文件夾下同類型文件

    這篇文章主要為大家詳細介紹了python實現(xiàn)批量提取指定文件夾下同類型文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論

文昌市| 嘉鱼县| 临邑县| 孟津县| 浑源县| 宜兴市| 滁州市| 天柱县| 博罗县| 镶黄旗| 黄浦区| 清流县| 南和县| 黔西| 汝州市| 永宁县| 泾川县| 长宁县| 德阳市| 宁武县| 沿河| 库尔勒市| 建始县| 德州市| 青冈县| 芜湖县| 巩留县| 潮州市| 渝中区| 赤壁市| 永川市| 连云港市| 竹溪县| 柳河县| 大冶市| 洱源县| 聊城市| 石屏县| 奎屯市| 盖州市| 白银市|