python入門第十課:函數任意個參數傳遞、返回值,函數模塊化方法

2020-12-09 傫傫若遺

本教程使用的課本是《Python編程:從入門到實踐》,作者:[美] Eric Matthes

本節繼續介紹函數的一些特性,包括返回值,任意個參數傳遞,列表作為函數參數等。

一、函數的返回值

函數的一個很重要的功能是有返回值,函數使用return語句將結果返回給主函數。

1、返回簡單值

我們對上一篇的例子稍加改造,將結果用return語句返回給變量fbook,在主函數中才列印出結果。

def favorite_book(btype,book,page='900'):"""輸出我最喜歡的書"""return ('這是一本'+btype+'類的書'+'書名叫:'+book+'共有'+page+'頁')fbook = favorite_book('哲學','易經')print(fbook)

2、返回字典

我們可以在函數內部構造一個字典,然後作為返回值返回,請看代碼:

def favorite_book(btype,book,page='900'):"""輸出我最喜歡的書""" fbook = {'類別':btype,'書名':book,'頁數':page}return fbookfbook = favorite_book('哲學','易經')print(fbook)for k,v in fbook.items(): print(k,v)

函數可以返回任意類型的數據,大家可以自己嘗試。

二、傳遞列表給函數

使用列表處理數據會很方便和高效,下面我們對第八課中的字符串和數字分離代碼稍加改造,用函數來表示,請看代碼:

def speList(Alist,str_list,num_list):while Alist:if isinstance(Alist[-1], int): # [-1]是指最後一個列表元素num_list.append(Alist.pop()) # 彈出最後一個元素,存入num_list中if isinstance(Alist[-1], str): str_list.append(Alist.pop()) # 彈出最後一個元素,存入str_list中Alist = ['a',2,'dd',15,78,22,'ff','kk']str_list = [] #用來存儲字符串num_list = [] #用來存儲數字speList(Alist,str_list,num_list)print(str_list) #列印字符列表print(num_list) #列印數字列表print(Alist)

除了多一行函數定義和執行函數外,我們並沒有額外寫代碼了。要注意最後一條Print的執行結果,說明函數對列表的操作是永久改變的,Alist執行後變成了空列表,因為裡面的元素在函數中都被移除列表了。

如果不想讓函數修改列表,可以複製一份列表,還記得複製列表用操作符「[:]」嗎?見下面的執行結果,紅色框中是改變的部分:

三、使用任意數量的參數

函數還可以定義成使用任意數量的參數,這樣當預先不知道有多少參數的時候就很有用。比如製作不同麵條需要的配料不同,但是都可以用同一個函數來處理,請看代碼:

def makenoodles(*toppings):'''列印製作麵條的配料'''return toppings;print('您的番茄雞蛋面配料有:',makenoodles('番茄','雞蛋'))print('您的炸醬麵配料有:',makenoodles('肉絲','','香菇','香油'))

*toppings 中的星號讓Python創建一個名為toppings 的空元組,並將收到的所有值都封裝到這個元組中。主意,元組的元素是不可修改的。

我們也可以將位置實參和任意數量參數結合起來用,比如增加一個表示分量的變量,列印麵條的時候能同時說明麵條的分量。

如果將上面例子中的*toppings改成兩個星號開頭,則會傳遞給函數一個字典,這時傳遞給函數的參數形式是以「鍵=值」的形式的,這種形式很直觀,能幫助我們傳遞更多的信息。

def makenoodles(size,**toppings):'''列印製作麵條的配料''' print('這份麵條的分量是'+size+'量')return toppings;cailiao = makenoodles('4',zhuliaos = ['番茄','雞蛋'],peiliaos = ['油','鹽','糖'])print(cailiao,'\n')print('主料有:',end='')for zhuliao in cailiao['zhuliaos']: print(zhuliao+',',end='')print('\n配料有:',end='')for peiliao in cailiao['peiliaos']: print(peiliao+',',end='')

上面代碼比較複製一點,我們是先把字典列印出來,然後再去字典中將主料和配料列印出來,大家仔細體會。

四、函數的模塊化

在這之前,我們都是在同一個文件裡面編寫代碼。

我們可以將函數與主程序分別存儲在不同的文件,主程序使用函數的時候需要導入函數模塊,這樣的好處有幾個:函數模塊可以分享給其他人使用,隱藏細節,更專注於高層邏輯的編寫。

我們在同一個目錄下,新建了一個mknoodles.py的文件,並將函數的定義放在這個文件裡面,hello.py是我們的主程序。

主程序的代碼沒有多大變化,增加了一個import mknoodles,函數調用時增加了一個前綴,變成:mknoodles.makenoodles而已,執行的結果和上例一模一樣。

如果不想在調用函數的時候增加前綴,我們需要指定一下導入的函數名,見下面:

還可以給模塊或者函數指定別名,下面是給函數makenoodles指定了一個別名叫pp,調用的時候就直接使用pp()。大家可以自己試一下給模塊mknoodles指定別名。指定別名是為了避免與主程序中的函數命名相同。

還可以使用from mknoodles import *這種形式導入所有的函數,但一般不推薦這種方法,會導致各種命名衝突。

最後說一個小細節,函數名要清晰易懂,在函數體中要有注釋,說明這個函數是幹什麼的,方便後續維護。因為再過幾個月,可能連你自己都忘了這個函數是幹什麼了。

長按文末點讚送三連,支持本文作者多寫點~

相關焦點

  • Python函數詳解一(函數參數、變量作用域)
    python除了可以直接使用內置函數,還支持自定義函數。定義函數使用 def 關鍵字,格式如下:函數的返回值函數的返回值用return語句返回,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。如果沒有返回值,函數執行完畢後也會返回結果,只是結果為None。
  • Python入門基礎中怎麼定義函數,函數調用,函數傳遞參數
    定義一個函數你可以定義一個由自己想要功能的函數,以下是簡單的規則:函數代碼塊以def關鍵詞開頭,後面依次寫出函數名、括號、括號中的參數和冒號。任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數。函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。函數內容以冒號起始,在縮進塊中編寫函數體。return 表達式結束函數,選擇性地返回一個值給調用方。
  • Python函數的參數傳遞
    在定義函數時,如果有些參數存在默認值,即部分參數不一定需要調用程序輸入,可以在定義函數時直接為這些參數指定默認值。leju(「hello~」,4)輸出結果如下:由於函數調用時需要按順序輸入參數,可選參數必須定義在非可選參數的後面,即leju()函數中帶默認值的可選參數times必須定義在str參數後面。
  • Python基礎知識儲備,函數的參數和返回值的用法,實操演示
    ,在函數內部作為變量使用實參:調用函數時,小括號中的參數,是用來把數據傳遞到函數內部使用的。二、 函數的return返回值1)在程序開發中,會希望一個函數執行結束後,告訴調用者一個結果,以便調用者針對具體的結果做後續的處理2)返回值是函數完成工作後,最後給調用者的一個結果3)在函數中使用 return 關鍵字可以返回結果
  • 言C語言陷阱與技巧第21節,函數只能返回一個值嗎?有多個返回值怎麼...
    例如使用 python 編寫程序時,函數返回多個值是非常方便的:deffun(): ...return a, b; // 非法}那麼,是不是C語言函數無法返回多個值呢?請繼續往下看。「返回」多個值雖然C語言的語法限定 return 語句只能返回一個值,但C語言函數完全可以向函數調用者傳遞多個值。
  • Python返回值及參數
    返回值 returns="dsfadsfsadsa"defmy_len():i=0forkins:i+=1# print(i)returni# 返回值length=my_len()print(length)返回值問題返回值三種情況不寫返回值不寫return只寫return
  • python入門第九課:函數的定義及多種參數傳遞方式
    本教程使用的課本是《Python編程:從入門到實踐》,作者:[美] Eric Matthes本節介紹Python中的函數,函數是可以反覆使用的一段代碼,有了函數能大大簡化編程工作量,還能使代碼更加簡潔,所以我們需要將能用函數表示的代碼都寫成函數。比如需要輸出我最喜歡的書是什麼?
  • 給妹子講python-S01E17函數的基本特徵
    給妹子講python-S01E10動態類型與共享引用給妹子講python-S01E11賦值與對象拷貝給妹子講python-S01E12循環迭代初體驗給妹子講python-S01E13循環迭代高級技巧給妹子講python-S01E14可迭代對象和迭代器給妹子講python-S01E15迭代環境給妹子講
  • python 函數定義以及函數的調用
    函數名命名規則: 字母、數字和下劃線組成,和變量命名規則一致return 後面可以返回任意表達式,但不能是賦值語句3. 函數調用:函數名(參數)4.return 和 print 的區別,return是函數的返回值,返回值可以賦值給變量,而print只是列印出來實例:判斷是否大於8,有2種方法方法一li = [2, 3, 8, 9, 12]for i
  • Python函數的基本特徵詳解
    函數還能計算出一個返回值,並能夠改變作為函數輸入的參數,而這些參數在代碼運行時也許每次「代入」的值都不相同。函數是python為了代碼最大程度的重用和最小化代碼冗餘而提供的最基本的程序結構。函數有關的內容主要分為函數的基本概念、作用域以及參數傳遞,還有一些相關的高級概念,如裝飾器。
  • 帶參數的無返回值(void)函數如何返回處理結果?(附代碼)
    在軟體開發過程中有一種很常見的編程方法,就是即使將參數傳給無返回值的void函數也能實現對原始參數值的修改,這句話到底說的什麼意思,且看示例。void函數如何返回值一個例子:普通帶參數的函數如何做返回值?
  • Python每天一分鐘:如何把元組/字典作為參數傳遞給函數(附代碼)
    學習程式語言的讀者對於函數參數的傳遞應該都不陌生,目前業內已經有多種高級語言允許定義個數可變的參數,這樣的好處是可以在調用函數時傳入任意多個參數。python可變參數當然,Python 也不例外,那麼如何在定義函數時支持使用可變參數呢?
  • Python中的函數參數
    ,使用默認值 print("使用默認值", t) return # 調用函數,不傳入參數會使用默認值 print(tac())
  • python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數
    由於DLL中函數中傳遞的參數類型比較多樣化,擬打算分三次講解這部分內容,這次先講傳遞數值、指針與字符串參數的情況,後面再分兩次講解傳遞結構體、數值數組等類型的情況。其C語言的實現代碼如下:在Python中的調用方式如下:這個函數應該說是最簡單的一個函數了,在第17行,直接使用第一步加載DLL後返回的名稱dll,後面跟函數名字即可返回其值。
  • Python使用ctypes模塊調用DLL函數之傳遞結構體參數
    上篇已經講了傳遞數值、指針、字符串參數的例子,詳細細節請參考:這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞結構體參數的情況。同樣,作業系統環境是win7 64位,Python使用的版本是python2.7.14,函數約定的調用方式為C調用(cdecl)方式。
  • Python的函數思想及基本用法,重!
    返回值列表是函數傳出的參數,由return保留字建立,該列表也同參數列表一樣,可以是任何的數據類型和任意數量大小的列表。當返回值列表的元素大小為0時,函數的執行只是對程序進行代碼塊的操作,不返回任何值,return需要省略。函數的調用,通過函數名來調用函數功能,對函數的各個參數賦予實際值,實際值可以是實際的數據值,也可以是在調用函數前已經定義過的變量。
  • Python函數參數的使用方法
    在《初識Python函數編程與代碼的可復用性》一文中,我們已經了解了如何定義一個函數和調用函數。但對函數參數的傳遞沒有詳細討論,本文主要討論函數參數的傳遞。函數中的參數起到了傳遞數據的作用,函數調用者可以通過函數參數把函數內部需要的數據從外部傳遞過去。
  • python中函數的基礎用法
    python中的內置函數提供了基礎功能,在實際開發中,我們需要將這些基礎功能進行搭配組合,來有效解決我們的問題。如何將我們自己構建的代碼作為一個可復用的工具,最基本的方法就是寫成函數。通過函數可以減少代碼冗餘,提高編碼效率。
  • Python函數概述
    任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數。函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。函數內容以冒號起始,並且縮進。Return[expression]結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。
  • 圖解 Python 函數
    如果想要定義函數,則需要以「def 函數名():」的格式為開頭編寫代碼。在這之下的一個模塊就是一個函數的範圍。Python的模塊就如前文中提到的,是根據縮進的等級來進行區分的。同時,對於函數也需要設定參數,函數可以根據參數的值來執 行各種指令。在Python中,可以通過使用列表或者雙精度浮點型變量來靈活指定參數。同時,也可以將函數運行的結果作為返回值返回。 函數可以多次調用。