初始Python函數編程與代碼的可復用性

2021-01-07 米粒教育

前面我們寫的Python程序代碼都沒有涉及到Python函數,所有的代碼都被順序安排在一起,程序的執行過程也是順序執行。

下面的代碼是計算自然數10以內的累加和:

代碼聲明了變量sum並初始化為零,然後連續9條語句求自然數1至自然數9的累加和,最後輸出sum變量。上面的程序代碼和程序的執行結果都沒有問題,但這不是最好的編程方式。因為上面代碼的重複語句太多,代碼看上去也不夠簡潔,需要使用更好的方法改變代碼結構,避免編寫大量的重複語句。

使用for循環語句避免重複代碼的編寫:

上面的程序使用for循環語句求自然數10以內的累加和,程序代碼看上去簡潔多了,也沒有了重複語句。這是應用Python的循環語句改變了代碼的結構,提高了代碼的復用性。

雖然使用循環語句可以解決一些代碼語句重複的問題,但是不能解決功能性代碼重複的問題。看下面的程序代碼:

上面的程序代碼完成兩個功能:一個功能是求自然數10以內的累加和並輸出;第二個功能是求自然數20以內的累加和並輸出。這兩個功能相同,代碼也幾乎完全相同,只是循環次數不同,這種情況就屬於功能性重複,循環可以解決代碼重複的問題,但解決不了功能性重複的問題。

我們可以設想一下,在上面的程序代碼中,如果我們把求自然數累加和的代碼單獨編寫為一個代碼塊,自然數作為代碼塊的一個參數傳入進去,該代碼塊對傳入的自然數求累加和,並把求和結果返回給調用這個代碼塊的語句,這樣就解決了程序中功能性重複的問題。

在Python語言中,Python提供了函數用來解決類似上面功能性重複的問題,其實函數的作用遠不止於解決功能性重複的問題,函數是對程序邏輯進行結構化或過程化的一種編程方法,它可以將能夠完成獨立功能的代碼塊封裝成易於管理的函數,這些函數可以被程序中的其它語句調用,而調用者可以把函數看成黑盒,不用考慮函數的內部結構和特性,只需傳入參數和接收返回值就可以了。

在Python語言中,函數分為三部分:第一部分是函數聲明,函數聲明佔一行語句,聲明語句開頭使用def關鍵字,在def關鍵字後面空格後緊跟函數的名稱,函數名稱後面是一對小括號,括號內是需要傳入的參數,參數可以為空;第二部分是函數體,函數體可以佔多行語句,函數體內包括函數注釋和代碼;第三部分是返回語句,如果函數沒有返回值可以省略第返回語句。下圖是Python函數結構圖。

圖 1 Python函數結構圖

在Python函數結構圖中,「functionname」表示函數的名稱,「parameters」表示傳入函數的參數,多個參數之間使用英文逗號分隔, 「函數_文檔字符串」是函數的注釋文檔,主要給出函數的功能、參數說明等信息(注釋文檔可以省略),「function_suite」是函數的代碼,「expression」是返回的表達式或數據。

我們了解了函數結構後,就可以使用函數來解決上面程序中求自然數累加和功能重複的問題。

上面的程序代碼就比前邊的程序代碼簡潔強大多了,它可以求任意自然數以內的累加和,而且編寫的代碼量也很少。程序定義了函數summation,該函數完成求給定自然數以內的累加和功能,自然數由函數的參數number指定。代碼語句調用函數時,直接寫上函數名稱即可,函數名稱後面是一對小括號,需要傳入的參數放在小括號內。因為summation函數返回傳入自然數的累加和,因此print語句輸出了函數的返回值。

現在我們已經初步掌握了Python函數的使用,後面我們會深入討論函數的參數。

相關焦點

  • 寫Python 代碼不可不知的函數式編程技術
    近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。本文對 Python 中的函數式編程技術進行了簡單的入門介紹。本文適合對函數式編程有基本了解的讀者。
  • 白話 Python 的函數式編程
    所謂函數式編程,就是指代碼中每一塊都是不可變的(immutable),都是由 pure function 的形式組成。這裡的 pure function 是指函數本身相互獨立,互不影響,對於相同的輸入,總會有相同的輸出。也就是我們常說的沒有副作用。
  • 寫 Python 代碼不可不知的函數式編程技術
    作者:Raivat Shah參與:魔王、Jamin本文對 Python 中的函數式編程技術進行了簡單的入門介紹。近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。
  • Python每天一分鐘:如何把元組/字典作為參數傳遞給函數(附代碼)
    學習程式語言的讀者對於函數參數的傳遞應該都不陌生,目前業內已經有多種高級語言允許定義個數可變的參數,這樣的好處是可以在調用函數時傳入任意多個參數。我們今天就以元組和字典為例給大家詳細介紹如何給函數傳遞可變參數python函數的可變參數我們首先來了解下python中函數的形參與實參定義:
  • python+C、C++混合編程的應用
    python與C/C++混合編程的本質是python調用C/C++編譯的動態連結庫,關鍵就是把python中的數據類型轉換成c/c++中的數據類型,給編譯函數處理,然後返回參數再轉換成python中的數據類型。
  • 基本初等函數 指數函數 代碼篇
    本文首發於微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列博客。由於機器學習和數學密切相關,尤其是數學中的函數,因此我們非常有必要複習和了解基本的函數知識。上一篇文章中,我們為大家介紹了基本初等函數中的指數函數 基本初等函數 指數函數,本文將為大家介紹如何利用python語言完成函數的繪製。
  • 詳解 Python 的 enumerate 函數
    enumerate 使你的代碼更具 Python 範兒為什麼使用 enumerate() 函數來產生元素的索引是很有用的呢?在 Python 中我們通常沒有必要手動的生成元素的索引,完全可以將這種簡單的任務扔給 enumerate() 函數。這樣一來既提高了你的代碼可讀性,也減少了拼寫錯誤的可能。改變初始索引值enumerate() 函數的另一個有用的特性就是它可以改變初始的索引值。
  • 小白學編程?從一個簡單的程序開始學習Python編程
    筆者學習編程的時間也挺長的,因為業餘,因為時間不多,各種原因,自學編程的路特別難走。然後筆者發現,自己能為小白貢獻一些力量,然後決定創作適合小白的python編程類內容。今天,筆者想帶編程小白們從一個簡單的程序開始學習Python編程。
  • Python編程題:兩個日期間的天數統計(附代碼)
    編程題一:計算兩個日期之間的天數題目如下:由於python中time模塊的很多函數都是可以直接計算出指定時間的時間戳(秒數),所以統計兩個日期間的總天數就非常方便了!代碼與運行結果:代碼與運行結果代碼解析:time1 = (int(t1[0]),int(t1[1]),int(t1[2]),0,0,0,0,0,0)這裡補足
  • Python中的函數式編程
    (英語:functional programming)或稱函數程序設計,又稱泛函編程,是一種編程範型,它將電腦運算視為數學上的函數計算,並且避免使用程序狀態以及易變對象。函數程式語言最重要的基礎是λ演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。
  • js代碼優化之編程函數
    在編程的世界中,有這樣的一個原則,簡稱二八定律二八定律:影響程序的80%性能的往往是20%的代碼在js的編寫過程中,函數設計就相當於那20%,時刻影響著你的代碼,可以說是至關重要。那麼對於函數的設計原則,你又了解多少?1.
  • Python代碼結構:函數
    「1.定義函數與調用函數定義python函數:依次輸入def、函數名、帶有函數參數的圓括號,最後緊跟一個冒號(:)函數命名規範:必須使用字母或者下劃線_開頭,僅能含有字母、數字和下劃線;定義函數:def do_nothing():... pass註:python函數中的pass表明函數沒有做任何事情。
  • Python之函數學習(八)
    python語言,即可以進行函數式的編程的語言,又是可以進行面向對象編程的語言,所謂函數,簡單的理解就是將一些語句集合到一起,這樣可以在程序中多次的調用
  • python高階函數:map、filter、reduce的替代品
    什麼是高階函數?高階函數是一種將函數作為參數,或者把函數作為結果返回的函數,map函數、sorted函數就是高階函數的典型例子。map函數在小編以前的文章中做過相應的知識分享。sorted函數是python的內置函數,它的可選參數key用於提供一個函數,它可以將函數應用到各個元素上進行排序。
  • 慢步學python,編程基礎知識,流程控制語句if
    慢步業餘學python編程,今天休息繼續分享python編程知識。面向過程編程,重要的是程序的流程,今天說說流程控制語句if。if結構python中常見的流程結構很多,if結構,在很多程式語言內也很常見。這個例子,先是敲入一個字符串變量a,然後放入判斷結構if裡面。type()函數可以得到括號內目標的類型。
  • Python代碼技巧,你值得擁有!
    如何將python代碼打包成獨立的二進位文件需要編譯的python代碼如下:#!/usr/bin/env python# -*- coding: utf-8 -*-print 'hello, world!'將python代碼打包成獨立的二進位文件步驟:
  • Python遊戲編程
    為了達到這一目的,本課程應用python語言的語法知識帶領學生從無到有的開發遊戲,通過每個遊戲項目逐步應用學到的語法知識,在實際編程中加深體會。在課程設計中儘量站在初學者的角度,降低開發遊戲的難度,從而方便學生理解及掌握遊戲編程的基本原理和實現方法,逐步提高學生對編程的興趣和能力。
  • 開發一個文章簡繁體轉化的小工具(附python代碼)
    文/IT可達鴨圖/IT可達鴨、網絡前言不知道大家在寫文章的時候,有無遇到簡體繁體轉化的問題。會編程的人參照以往項目的風格,大家一定會知道,可以用編程實現批量處理。哪怕是一百萬篇文章,只要一份代碼就能輕鬆鬆搞定。
  • 寫出漂亮 Python 代碼的 20條準則
    Python 具有語法簡單、代碼可讀性強和命令類似英語等特點,這讓編寫 Python 代碼比使用其他程式語言更容易、更高效。https://www.python.org/dev/peps/pep-0008/瀏覽完 PEP8 後,看看下面這些文章,其中展示了一些亮點和應用:如何參照 PEP 8 編寫漂亮的 Python 代碼https://realpython.com/python-pep8/優雅的 Python 與 PEP8https:/
  • 掌握這10個python技巧,讓你代碼工作如魚得水!
    Dice的研究表明,python是世界上最熱門的技巧之一,根據程式語言的流行度指數來看,python同時也是最受歡迎的程式語言。Python為何有如此大的魅力呢?那是因為,與其它程式語言相比,Python有以下5點優勢:1、和主流平臺、作業系統兼容。2、包含許多開源框架和工具。