python函数的组成要素_python函数要素有哪些?这7点是你写好python代码的关键
【摘要】對于python小白來說,寫好一個python代碼并不容易,不過你知道python函數要素有哪些?這7點是你寫好python代碼的關鍵,如果你想學好python,那么本文內容一定要自己試試,畢竟實踐出真知,那么python函數要素有哪些?這7點是你寫好python代碼的關鍵。
Python 雖然好用,但用好真的很難。尤其是函數部分,只要寫不好,后面的一連串人都會遭殃。看又看不懂,測試起來也麻煩,維護又維護不動,真是讓人頭疼。
那怎么寫好一個 Python 函數呢?《Writing Idiomatic Python》一書的作者在 Medium 上發表了一篇文章,給出了 6 個建議。希望能夠給你帶來幫助。
1、python函數要素有哪些——怎樣算是好函數?
“好”的 Python 函數和“差”的 Python 函數之間有什么差別呢?每個人都有自己的理解。基于我的理解,如果一個 Python 函數能夠符合下面的大部分條件,我會認為它是一個“好”函數:
·命名合理
·單一功能
·包括文檔字符串
·返回一個值
·不超過 50 行
·是冪等函數或純函數
對許多人來說,這些要求可能顯得過于苛刻了。不過,我保證,如果你的函數遵循這些規則,你的代碼會非常漂亮,會讓其他的程序員都“饞哭”的。
下面,我將一一討論這些規則,然后總結它們是如何創造“好”函數的。
2、python函數要素有哪些——注意命名
在這個問題上,我最喜歡的一句話是:
計算機科學中只有兩件事很讓人頭疼:緩存失效和命名。
盡管這聽起來很莫名其妙,但給一個事情命名太難了。下面是一個反面案例:
1def getknn(from_df):
原文中這個代碼沒有放上去,我們根據上下文信息進行了補充。
這個函數命名的第一個問題是它使用了縮寫。
對于那些并不出名的縮略詞來說,使用完整的英語單詞會更好。縮寫單詞的唯一原因是為了節省打字時間,但是每個現代編輯器都有自動填充功能,所以你只需要鍵入一次全名就可以了。
縮寫通常是特定領域的。在上面的代碼中,KNN 指的是“K-Nearest Neighbors”,df 指的是“DataFrame”,這是一個數據結構。如果另一個不熟悉這些首字母縮寫的程序員正在閱讀代碼,幾乎很難看懂。
關于這個函數的名字還有另外兩個小瑕疵:
·“get”這個詞是無關緊要的。對于大多數命名比較好的函數來說,很明顯有一些東西會從函數中返回,它的名字將反映這一點。
·from_df 也不是必要的。如果沒有明確的參數名稱,函數的文檔字符串或類型注釋會描述參數的類型。
那么我們如何重命名這個函數呢?很簡單:
1def k_nearest_neighbors(dataframe):
即使是外行,這個函數要計算的內容也很清楚,參數的名稱(dataframe)也清楚地表明了參數類型。
3、python函數要素有哪些——單一功能
單一功能原則不僅適用于類和模塊,也同樣適用于函數。
一個函數應該只有一個功能。也就是說,它應該只做一件事。
一個重要的原因是,如果每個函數只做一件事,只有這件事發生了變化,才需要改變這個函數。此外,如果這個函數的單個功能不再需要了,直接把它刪了就行了。
還是用例子來說明吧。
下面這個函數,可以做不止一件“事情”:
def calculate_and print_stats(list_of_numbers):
sum = sum(list_of_numbers)
mean = statistics.mean(list_of_numbers)
median = statistics.median(list_of_numbers)
mode = statistics.mode(list_of_numbers)
print('-----------------Stats-----------------')
print('SUM: {}'.format(sum) print('MEAN: {}'.format(mean)
print('MEDIAN: {}'.format(median)
print('MODE: {}'.format(mode)
這個函數做了兩件事:一是計算一組關于數字列表的統計數據,二是將它們打印到 STDOUT。
如果需要計算新的或不同的統計數據,或者需要改變輸出的格式,就需要對這個函數進行調整。所以,這個函數最好寫成兩個獨立的函數:一個用來執行并返回計算結果,另一個用來獲取這些結果并打印出來。
這種處理方式,不僅能讓測試函數更容易,并且還允許這兩個部分有了遷移性,如果合適的話,還可能一起應用到不同的模塊中。
在編程中,你會發現好多函數都可以做很多很多事情。同樣,為了可讀性和可測試性,這些函數應該被分解成更小的函數,每個函數只有一個功能。
4、python函數要素有哪些——文檔字符串(Docstrings)
雖然每個人似乎都知道 PEP - 8,它定義了 Python 的樣式指南,但是很少有人知道 PEP - 257,它是關于文檔字符串的。我再這里不簡單地重復 PEP - 257 的內容了,你可以在閑暇時讀一下。其中的關鍵內容是:
·每個函數都需要有一個文檔字符串
·使用適當的語法和標點符號;用完整的句子寫
·首先對函數的作用進行一句話的總結
·使用說明性語言而不是描述性語言
在編寫函數時,要養成寫文檔字符串的習慣,并在編寫函數代碼之前嘗試寫一下。如果你不能寫一個清晰的文檔字符串來描述函數做什么,就說明你需要再考慮考慮為什么要寫這個函數了。
5、python函數要素有哪些——返回值
函數可以被認為是一些獨立的程序。它們以參數的形式接受一些輸入,并返回一些結果。
參數有沒有都可以,但從 Python 內部的角度來看,返回值是必須要有的。你不可能創建一個沒有返回值的函數。如果函數沒有返回值,Python 會“強制”返回 None。你可以測試一下這段代碼:
? python3Python 3.7.0 (default, Jul 232018, 20:22:55)[Clang 9.1.0 (clang-902.0.39.2)]>Type "help", "copyright",
"credits"or"license"for more information.
>>> def add(a, b):...
print(a + b)...
>>> b = add(1, 2)3
>>> b
>>> b isNoneTrue
你會發現 b 的返回值實際上是 None。即使你寫的函數沒有返回語句,它仍然會返回一些東西。而且,每個函數都應該返回一個有用的值,測試起來也會更方便。畢竟,你寫的代碼應該能夠被測試。
試想一下,測試上面的 add 函會有多艱難。遵循這個概念,我們應該這樣寫代碼:
with open('foo.txt', 'r') as input_file:
for line in input_file:
if line.strip().lower().endswith('cat'):
# ... do something useful with these lines
if line.strip().lower().endswith(‘cat’): 這一行能夠工作,是因為每個字符串方法( strip ( )、lower ( )、end swith ( ) )都返回一個字符串作為調用函數的結果。
當給定函數沒有返回值時,有一些常見的原因:
“它所做的只是[一些與 I/O 相關的事情,比如將一個值保存到數據庫中]。我不能返回任何有用的東西。”
我不同意。如果操作順利完成,函數可以返回 True。
“我們修改了其中一個參數,將其用作參考參數。”
這里有兩點需要注意。首先,盡最大努力避免這種做法。用好了令人驚訝,用不好非常危險。其次,即使這樣做不可行,復制某個參數的成本太高,你也可以回到上一條建議。
“我需要返回多個值。單獨返回一個值是沒有意義的。”
可以使用元組返回多個值。總是返回一個有用的值,調用者總是可以自由地忽略它們。
6、python函數要素有哪些——函數長度
讓你讀一個 200 行的函數,并說出它是做什么的,你是什么感受?
函數的長度直接影響可讀性,從而影響可維護性。所以要保持你的函數簡短。50 行是一個隨意的數字,在我看來是合理的。你編寫的大多數函數應該要短一些。
如果一個函數遵循單一功能原則,它很可能是相當短的。如果它是純函數或是冪等的(下面討論) ,它也可能是短的。
那么,如果函數太長,應該怎么做?重構。這會改變程序的結構而不改變其行為。
從一個長函數中提取幾行代碼,并把它們變成自己的函數。這是縮短長函數的最快、也是最常見的方式。加上你給所有這些新函數取了合適的名稱,因此生成的代碼讀起來也會更容易。
7、python函數要素有哪些——冪等和函數純度
不管被調用了多少次,冪等函數總是在給定相同參數集的情況下返回相同的值。
結果不依賴于非局部變量、參數的可變性或來自任何 I / O 流的數據。下面的這個 add_three(number)函數是冪等函數:
def add_three(number):
"""Return *number* + 3."""
return number + 3
不管一個人調用 add_three(7)多少次,答案總是 10。以下是一個非冪等函數:
def add_three():
"""Return 3 + the number entered by the user."""
number = int(input('Enter a number: '))
return number + 3
這個函數的返回值取決于 I / O,即用戶輸入的數字。對 add_three()的每次調用都會返回不同的值。
如果它被調用兩次,用戶可以第一次輸入 3,第二次輸入 7,分別調用 add_three()返回 6 和 10。
冪等性的一個現實中例子是在電梯前點擊“向上”按鈕。第一次按時,電梯會被“通知”你要上去。因為按按鈕是冪等的,所以反復按它都沒有什么影響。結果是一樣的。
以上就是《python函數要素有哪些?這7點是你寫好python代碼的關鍵》的全部內容,這些python的使用技巧,全部都要建立在正確無誤的代碼上,環球網校的小編也祝大家python學習之路順利。如果你想知道更多的python編程知識,可以點擊下方資料下載鏈接。
總結
以上是生活随笔為你收集整理的python函数的组成要素_python函数要素有哪些?这7点是你写好python代码的关键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断数组中某个元素除自身外是否和其他数据
- 下一篇: python 面试题 2020_2020