關于函數(shù)的事情,總是說不完的,下面就羅列一些編寫函數(shù)的注意事項。特別聲明,這些事項不是我總結(jié)的,我是從一本名字為《Learning Python》的書里面抄過來的,順便寫成了漢語,當然,是按照自己的視角翻譯的,里面也夾雜了一些自己的觀點。看官也可以理解為源于《Learning Python》但又有點兒不同。
•函數(shù)具有獨立性。也就是常說的不要有太強的耦合性。要讓函數(shù)能夠獨立于外部的東西。參數(shù)和return語句就是實現(xiàn)這種獨立性的最好方法。
•盡量不要使用全局變量,這也是讓函數(shù)具有低耦合度的方法。全局變量雖然進行了函數(shù)內(nèi)外通信,但是它強化了函數(shù)對外部的依賴,常常讓函數(shù)的修改和程序調(diào)試比較麻煩。
•如果參數(shù)的對象是可變類型的數(shù)據(jù),在函數(shù)中,不要做對它的修改操作。當然,更多時候,參數(shù)傳入的最好是不可變的。
•函數(shù)實現(xiàn)的功能和目標要單一化。每個函數(shù)的開頭,都要有簡短的一句話來說明本函數(shù)的功能和目標。
•函數(shù)不要太大,能小則小,根據(jù)前一條的原則,功能目標單一,則代碼條數(shù)就小了。如果感覺有點大,看看能不能拆解開,分別為幾個函數(shù)。
•不要修改另外一個模塊文件中的變量。這跟前面的道理是一樣的,目的是降低耦合性。
小試一下遞歸
對于在python中使用遞歸,我一項持謹慎態(tài)度,能不用就不用,為什么呢?一方面深恐自己學藝不精,另外,遞歸不僅消耗資源,而且很多時候速度也不如for循環(huán)快。
不過,做為程序員,遞歸還是需要了解的。這里就列舉一個簡單的例子。
代碼如下:
>>> def newsum(lst):
... if not lst:
... return 0
... else:
... return lst[0] + newsum(lst[1:])
...
>>> newsum([1,2,3])
6
這是一個對list進行求和的函數(shù)(看官可能想到了,不是在python中有一個sum內(nèi)置函數(shù)來求和么?為什么要自己寫呢?是的,在實際的編程中,沒有必要自己寫,用sum就可以了。這里用這個例子,純粹是為了說明遞歸,沒有編程實踐的意義),當然,我沒有判斷傳給函數(shù)的參數(shù)是否為完全由數(shù)字組成的list,所以,如果輸入的list中字母,就會編程這樣了:
代碼如下:
>>> newsum([1,2,3,'q'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in newsum
File "<stdin>", line 5, in newsum
File "<stdin>", line 5, in newsum
File "<stdin>", line 5, in newsum
新聞熱點
疑難解答
圖片精選