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