致Python初學者的六點建議


Python是最容易學習的編程語言之一,其語法近似英語。通常,初學者只會遇到一些小麻煩,如強制縮進、在函數中使用self等。

然而,當開始閱讀、復制和編輯他人代碼時,麻煩就接踵而至了。

這里,我將解釋五個關於Python的概念,這些概念將有助於初學者修改他人代碼。這些建議通過總結Python開發新手在研討會上遇到的問題以及分析開發者社區的在線討論編寫而成的。這些開發者社區主要關注API的使用,圖像處理以及RICOH THETA相機的元數據(文本)處理等。其中,較為典型的開發者具有Java、C、JavaScript或bash的中級編程經驗,但在Python方面仍是新手。

他們可以自己編寫Python代碼來解決問題,然而在閱讀他人代碼時往往會遇到問題。

以下是幫助大家更好地理解Python的五點建議。

1. * args和 ** kwargs是函數參數

如果您查看Python模塊或者這些模塊的相關文檔,您可能會看到args和**kwargs。它們看起來像C語言里的指針,實際上並非如此。args只是函數的參數列表。**kwargs是關鍵字參數的字典。

*args示例:

在這里插入圖片描述
輸出:

在這里插入圖片描述

**kwargs示例:

在這里插入圖片描述
輸出:

在這里插入圖片描述

args和kwargs示例的代碼位於文件args_example.py,可在此處獲取。

2.列表解析是使用循環時的一種快捷方式

列表解析是返回列表的一種簡便方法。在代碼中,for循環寫作for number in args。

當循環中的表達式為num **2時,返回的列表值將為參數的平方。

在這里插入圖片描述
輸出:

在這里插入圖片描述
您可以在列表解析的末尾添加過濾器以過濾輸出結果。例如,僅對偶數進行平方,可以采用如下過濾方式:

在這里插入圖片描述

輸出:

在這里插入圖片描述
列表解析並未對for循環添加任何特殊的功能,采用這種方式是因為它更為簡短,並且在習慣語法后會使代碼更易於閱讀。不過有些開發者會過度使用列表解析,反而使代碼更難理解。這一點需要注意,復雜的列表解析和多個循環嵌套並非最佳實踐。

如果您剛開始學習Python,並遇到一個復雜的for循環,可以在網上搜索列表解析並查看如下三個組件的語法:

  1. 表達式

  2. for循環

  3. 過濾器

3. F-strings可以替代.format()

Python非常適合處理字符串,至少提供了3到4種將變量插入字符串的方法。這些方法大多數都較為笨重,但是有一種非常酷。

字符串連接

之前您也許寫過如下代碼:

在這里插入圖片描述
輸出:

在這里插入圖片描述

這種寫法難以閱讀,並且容易出現錯誤。即使存在語法高亮,仍會出現缺少空格的情況。

字符串替換

字符串替換可以幫助減少錯誤。

在這里插入圖片描述

輸出:

在這里插入圖片描述

使用字符串替換的示例位於文件format_example.py,可在此處獲取。

字符串格式

一個更好的方式是使用.format()方法,如下所示:

在這里插入圖片描述
盡管.format在字符串連接方面有很大地提升,但處理上仍然很笨重。

F-strings

要使用f-strings,首先需要將Python升級至3.6或3.7版本。

在這里插入圖片描述
在這里插入圖片描述

4. Lambda函數是匿名的

Python lambda函數是一種快捷方式。盡管可以將其指定為某變量,類似於普通函數,但通常情況下使用如下語法寫作匿名函數。

在這里插入圖片描述

輸出:

在這里插入圖片描述
如同Python中的多數快捷方式,lambda函數並不會帶來新的功能。盡管如此,使用此語法可以減少代碼的復雜程度。

5. 使用裝飾器來擴展Python函數

使用裝飾器時,通常會在一個函數上方標注@decorator_name。
在這里插入圖片描述
裝飾器可以任意命名,例如@panda。在使用裝飾器時,您無需了解如何創建自己的裝飾器以便使用,可以參考Django的http裝飾器的相關文檔。

在這里插入圖片描述
import這行代碼允許您使用預先構建好的裝飾器。在這種情況下,您只需了解@require_http_methods為您創建的函數my_view()添加的額外功能即可。

補充建議

由於我主要和一群專注於特定問題的人討論Python編程,這里,我希望得到適用於新手程序員的其他建議,以幫助他們更好地在開發者社區進行交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM