1. 程式人生 > 程式設計 >3種適用於Python的瘋狂祕密武器及原因解析

3種適用於Python的瘋狂祕密武器及原因解析

我不知道沒有他們我該如何生活

我編寫Python已有5年以上了,我的工具集通常變得越來越小,而不是越來越大。 許多工具不是必需的或無用的,而其中的一些只是簡單地增加了。

這是我堅持了很長時間的三個,與其他人不同,我只是越來越多地使用它們。

3種適用於Python的瘋狂祕密武器及原因解析

祕密武器#1:使用Kite可以更快地編寫程式碼,減少Google編寫時間

大多數程式碼編輯器具有自動完成功能,看起來像這樣:

3種適用於Python的瘋狂祕密武器及原因解析

…使用語言(有時是庫)文件來建議函式名稱和引數之類的內容。

當然可以,但是如果您的編輯器可以瀏覽GitHub資料多年並自動完成,不僅是函式名,還可以是整行程式碼。

這只是使用Kite的三個理由中的第一個。

原因1:程式碼行完成

風箏會檢查您的程式碼庫和變數,線上使用的常用引數名稱,文件,然後提出如下超級上下文建議:

3種適用於Python的瘋狂祕密武器及原因解析

上面的示例展示了Kite如何預測您將在通用名稱(如b)或通用名稱(如x或y)中使用的變數。

…我們已經花費了大約50年的工程師工作時間,在Github上對所有程式碼進行語義索引,建立統計型別推斷,以及豐富的統計模型,這些模型可以非常深入地使用此語義資訊。 — Kite創始人/執行長Adam Smith

這是一個實時演示視訊,或者,如果您願意,可以在沙盒中播放。

原因2:副駕駛進行文件編制

3種適用於Python的瘋狂祕密武器及原因解析

如果您從未聽說過" RTFM",那麼您可能還沒有犯過我的錯誤。

無論如何,在給高階開發人員打電話或什至檢視Stack Overflow答案之前,都應始終閱讀文件。

Kite Copilot使文件愚蠢容易。 它與您的編輯器一起執行,並實時顯示您用游標突出顯示的任何物件/功能/等的文件。

親愛的高階開發人員,我的第一份工作:對不起。 現在,我真的沒有藉口不首先在文件中尋找答案。

原因3:在本地私人執行

它是在本地執行的所有基礎之上,因此您可以獲得令人難以置信的快速建議,它可以離線工作,並且您的程式碼永遠不會發送到雲中。

對於網際網路連線較差的人和在封閉原始碼庫中工作的人們來說,這是非常重要的。

結果

我使用風箏已有多年了,而且一直在不斷進步。 憑藉超過1700萬美元的投資,這家公司無處不在,而且由於某些愚蠢的原因,該工具是完全免費的。

您所要做的就是為您的編輯器下載Kite外掛,或者下載副駕駛,它可以為您安裝外掛。 去實現它(夢想);去得到它(東西!

祕密武器2:使用Mypy穩定您的程式碼

Python是動態型別的,一個過分簡化的解釋是您可以隨時將任何變數設為任何資料型別(字串,整數等)。

# These two variable types are declared the exact same way 
# Python figures out the data type on it's own,dynamically 
# string 
var_name = "string here" 
# integer 
var_name = 1234 

相反的是靜態型別化的語言,其中變數必須具有一種特定的資料型別,並且必須始終遵循該資料型別。

# Many languages require the data type to be declared too 
# string 
str var_name = "string here" 
# integer 
int var_name = 1234 

動態型別的優點/缺點

動態鍵入的優點是您在編寫時可以很懶惰,並且可以減少程式碼混亂。

缺點很多,但也很大:

  • 在開發週期的後期,您通常會遇到錯誤
  • 由於Python不斷找出型別,因此程式碼的執行效果更差
  • 函式不穩定,因為其輸入和輸出可以更改資料型別而不會發出警告
  • 交出程式碼會更加不穩定,因為其他人可能不知道您的變數是或可能成為哪種資料型別

Python中的靜態型別

輸入Mypy。 一個免費的Python模組,可讓您在Python內部使用靜態型別。

點安裝mypy之後,下面僅是一個使用示例:

# Declaring a function using normal dynamic typing,without mypy 
def iter_primes(): 
# code here 
# Declaring the same function with mypy static typing 
 from typing import Iterator 
 def iter_primes() -> Iterator[int]: # code here 

在mypy示例中,我們指定該函式返回一個整數迭代器。 通過執行一致的輸出,此簡單的更改使該功能更適應未來的需求。

其他開發人員只需檢視宣告即可檢視輸出將是哪種資料型別,並且與僅使用文件不同,如果不遵守該宣告,您的程式碼將出錯。

這是一個非常簡單的示例,摘自此處的示例,如果仍然沒有意義,請檢查一下它們。

結果

很難列出靜態鍵入可以減輕您將來痛苦的所有方式,但是mypy文件具有很好的常見問題解答,但有更多的利弊。

如果您在穩定至關重要的生產程式碼庫中工作,請絕對嘗試一下mypy。

祕密武器#3:使用Sonarlint更快地發現錯誤並編寫更簡單的函式

如今,每個編輯器都有某種型別的錯誤檢查或內建的" lint"。 它通常在不執行程式碼的情況下檢視程式碼,並嘗試猜測可能出了什麼問題。 這稱為靜態程式碼分析。

3種適用於Python的瘋狂祕密武器及原因解析

動態程式碼分析實際上會嘗試執行/編譯部分程式碼以檢視其是否正常執行,但會在後臺自動執行。 實際上,它無需猜測,而是知道它是否可以工作以及確切的錯誤是什麼。

SonarLint處於最佳狀態,是動態程式碼分析領域的佼佼者。 這些功能是我喜歡它的原因:

註釋或未呼叫的程式碼

我對在整個程式碼庫中留下列印語句,註釋掉的程式碼以及未使用的函式感到內gui。 這將警告我,使其難以忘記,並告訴我它在哪裡,易於查詢。

安全風險

實時將龐大的,不斷更新的安全風險資料庫扔到您的程式碼庫中,警告您可能面臨的任何已知漏洞。

安全風險非常小眾,無法記住,因此每個人都應該使用某種方法來跟蹤這些風險。 SonarLint是一個不錯的起點。

永遠不會執行的程式碼

與未呼叫的程式碼略有不同,如果我建立的評估結果無法達到,這將警告我。 這些問題很難發現,可能會導致數小時的除錯,因此這是我最喜歡的警告之一。

這是一個例子:

a = None 
if a == None or not a or a: 
 this_will_always_get_called() 
else: # sonarlint will warn you about this line never being executed 
 this_will_never_get_called() 

認知複雜性

我可以寫一個完整的帖子,這是一個非常有趣的話題,實際上,上面有一個完整的白皮書。

簡單的解釋是,他們建立了一個數學公式,可以對程式碼的閱讀/理解難度進行評分。

它不僅非常有用,而且易於遵循。 每當SonarLint要求我"降低認知複雜性"時,它都會附帶一個關於我違反的規則的簡單說明,例如"太多巢狀的if語句"。

結果

我發現這比基本的阻止和掉毛實踐有用,而且我相信這使我編寫了對人類友好的程式碼。 順便說一句,這是Pythonic!

SonarLint是免費的,因此沒有理由不立即獲取它並將其附加到您的編輯器中。

結論

如果您在此處跳過,則只是一個快速警告,除非您對這些功能有基本的瞭解,否則可能無法正確使用它們。

以下是這三種祕密武器的概述:

  • 使用Kite Copilot和編輯器外掛更快地編寫Google內容
  • 使用Mypy Python模組穩定程式碼
  • 使用SonarLint編輯器外掛更快地發現錯誤並編寫更簡單的函式

希望這些工具對您有好處,我本人也非常喜歡它們。 我敢肯定,儘管我錯過了其他一些不可思議的資源,所以請務必分享您在評論中沒有的生活。

到此這篇關於3種適用於Python的瘋狂祕密武器的文章就介紹到這了,更多相關Python的瘋狂祕密武器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!