1. 程式人生 > >Python學習手冊之 Python 之禪、 Python 程式設計規範和函式引數

Python學習手冊之 Python 之禪、 Python 程式設計規範和函式引數

在上一篇文章中,我們介紹了 Python 的的正則表示式使用示例,現在我們介紹 Python 之禪、 Python 程式設計規範和函式引數。檢視上一篇文章請點選:https://www.cnblogs.com/dustman/p/10040430.html

Python 之禪
讓程式能夠正確執行只是成為一個優秀的 Python 程式設計師的一部分。編寫易於理解的清晰程式碼同樣也很重要。
要想學好一門程式語言,那就需要接受這門語言的哲學。那麼如果你想精通 Python,就需要踐行 Python 背後的設計哲學。
下面程式碼提供了訪問 Python 之禪的方法。

import this

執行結果:

The Zen of Python, by Tim Peters

Beautiful 
is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never
pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation
is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

翻譯和解釋:

Python之禪 by Tim Peters

優美勝於醜陋(Python 以編寫優美的程式碼為目標)

明瞭勝於晦澀(優美的程式碼應當是明瞭的,命名規範,風格相似)

簡潔勝於複雜(優美的程式碼應當是簡潔的,不要有複雜的內部實現)

複雜勝於凌亂(如果複雜不可避免,那程式碼間也不能有難懂的關係,要保持介面簡潔)

扁平勝於巢狀(優美的程式碼應當是扁平的,不能有太多的巢狀)

間隔勝於緊湊(優美的程式碼有適當的間隔,不要奢望一行程式碼解決問題)

可讀性很重要(優美的程式碼是可讀的)

即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)

不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的程式碼)

當存在多種可能,不要嘗試去猜測
而是儘量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)

雖然這並不容易,因為你不是 Python 之父(這裡的 Dutch 是指 Guido )

做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)

如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)

名稱空間是一種絕妙的理念,我們應當多加利用(倡導與號召)

“解決問題的最優方法應該有且只有一個,儘管這一方法並非顯而易見。”這句話引用並反駁了 Perl 語言的哲學,即應該有一種以上的方法來做到這一點。

Python 程式設計規範
Python 程式設計規範,英文 Python Enhancement Proposals (PEP)。是由經驗豐富的 Python 開發人員提出的對語言的規範改進建議。PEP 8 是最受歡迎的關於編寫可讀程式碼的指南,它包含了一些關於變數名稱的指南。
下面是一些準則:
- 模組應該有簡介和全小寫的名稱。
- 類名應該首字母大寫 CapWords 這樣的方式。
- 大多數變數和函式名應該是小寫加下劃線 lowercase_with_underscores 這樣的方式。
- 常量 (變數值不會被改動) 應該是大寫加下劃線 CAPS_WIHT_UNDERSCORES 這樣的方式。
- 字串不要以空格收尾。
- 累的屬性若與關鍵字名字衝突,加一個字尾下劃線,儘量不要使用縮略等其他方式。

PEP 8 還建議在運算子周圍的逗號後面使用空格,以提高可讀性。

但是不應該過度使用空白。例如,避免在任何型別的括號內直接留出任何空格。

PEP 8
PEP 8 還推薦如下:
- 每行應不超過 80 個字元。
- 應該避免 'from module import *'。
- 每行只應該有一條語句。
- 確保對模組、函式、方法和行內註釋使用正確的風格。
它還建議使用空格,而不是製表符來縮排,更不能混合使用製表符和空格。然而在某種程度上,這是個人喜好的問題。如果使用空格,推薦每次只是用 4 個空格的縮排。選擇其中一種方式更重要,並堅持下去。
PEP 中最重要的建議是,在你認為有意義的時候忽略規範。如果 PEP 建議會導致程式碼的可讀性降低,與周圍程式碼不一致或不向後相容,則不要再遵循 PEP 建議。總的來說,遵循 PEP 8 將大大提高程式碼的質量。

其它一些 PEP 包含程式碼樣式規範:
PEP 20: Python 之禪
PEP 257: 程式碼中使用的 Docstring 特性

函式引數
Python 允許具有可變長引數的函式。使用 *args 作為函式引數,可以將任意數量的引數傳遞給該函式。然後,引數可以作為函式體中的元組訪問。

def func(name,*args):
 print(name)
 print(args)

func(1,8,5)
func(*[1,5,4,5,7,8]) # args = tuple[1,2,3,4,5]

執行結果:

>>>
1
(8, 5)
1
(5, 4, 5, 7, 8)
>>>
引數 *args 必須位於函式的命名引數之後,其沒有 key 值,你可以使用任何名稱替換 args

預設值
函式的命名引數可以通過給出預設值而成為可選引數,這些引數必須在不需要預設值命名引數的後面。

def func(name,age,sex='F'):
print(sex)

func("ZS",0.5)
func("LS",10,"M")

執行結果:

>>>
F
M
>>>
如果這個引數呼叫時給出,那麼忽略預設值,否則使用預設值。

**kwargs (關鍵字引數) 允許您處理預先定義的命名引數。關鍵字引數返回一個字典,其中鍵是引數名,值是引數值。

def func(name,age=12,*args,**kwargs):
 print(name)
 print(age)
 print(args)
 print(kwargs)

func('ZS',age=11,sex='m',hobby='music') #*args接收元組,**args接收字典

執行結果:

>>>
ZS
11
()
{'sex': 'm', 'hobby': 'music'}
>>>

age, sexhobby 是傳遞給函式呼叫引數的名稱。

傳遞給 **kwargs 的引數不包含傳遞給 *args 的引數。

 

 

 

“把問題解決掉,就是你能應付未來的唯一方法。”