搜尋
首頁後端開發Python教學Python中的函數詳解

Python中的函數詳解

Aug 02, 2017 am 11:47 AM
python詳解

其中,一些重要的函數屬性包括以下幾個:

1. __doc__傳回指定函數的文件字串。

2. __name__傳回函數名字。

3. __module__傳回函數定義所在模組的名字。

4. func_defaults傳回一個包含預設參數值的元組,預設參數將在後文進行討論。

5. func_globals傳回一個包含函數全域變數的字典引用。

6. func_dict傳回支援任意函數屬性的命名空間。

7. func_closure傳回一個胞體元組,其中胞體包含了函數自由變數的綁定,閉包將在後文討論。

函數可以當作參數傳遞給其他函數。這些以其他函數作為參數的函數通常稱為更高階函數,這就構成了函數式程式設計中非常重要的部分。高階函數一個很好的例子就是map函數,該函數接受一個函數和一個迭代器作為參數,並將函數應用於迭代器中的每一項,最後返回一個新的列表。我們將在下面的範例中示範這一點,範例中將前面定義的square函數和一個數位迭代器傳遞給map函數。

此外,函數也可以在其他函數程式碼區塊內部定義,同時也能從其他函數呼叫中返回。

在上面的範例中,我們在函數outer中定義了另一個函數inner,並且當函數outer執行時將傳回inner函數。此外,就像其他Python物件一樣,函數也可以賦值給變量,如下所示:

在上面的範例中,outer函數在呼叫時將會傳回一個函數,並將傳回的函數賦值給變數func。最後,變數就可以像被傳回的函數一樣被呼叫:

func

(

)

在上面的square函數中,當包含該函數的模組載入到Python解釋器中時,或者如果該函數在Python REPL中定義,那麼將會執行函數定義語句def square(x)。然而,這對以可變資料結構作為值的預設參數有一些影響,這一點我們將會在後文講述。函數定義的執行會綁定目前本地命名空間中的函數名稱(可以將命名空間當作名字到值的一種映射,並且這種映射還可以嵌套,命名空間和範圍會在另一個教程中詳細介紹)到一個函數對象,該對像是一個對函數中可執行程式碼的包裝器。這個函數物件包含了一個對目前全域命名空間的引用,而目前命名空間指該函數呼叫時所使用的全域命名空間。此外,函數定義不會執行函數體,只有在函數被呼叫時才會執行函數體。

函數呼叫參數

除了正常的參數之外,Python函數也支援數量可變的參數。這些參數有主要有下面描述的三種類別:

1. 預設參數值:這允許使用者為函數的參數定義一些預設值。在這種情況下,可以以更少的參數來呼叫函數,而函數呼叫時未提供的參數,Python會使用預設提供的值作為這些參數值。下面的範例展示了這種用法:

上面範例函數的定義中,包含一個正常位置的參數arg和兩個預設參數def_arg和def_arg2。此函數可以以下面中的任何一種方式進行呼叫:

(1)只提供非預設位置參數值。在本例中,預設參數取預設值:

(2)用提供的值覆寫一些預設的參數值,包括非缺省位置參數:

當使用可變的預設資料結構作為預設參數時,需要特別小心。因為函數定義只執行一次,所以這些可變的資料結構(引用值)只在函數定義時建立一次。這就意味著,相同的可變資料結構將用於所有函數調用,如下面範例所示:

在每個函數呼叫中,「Hello World」都被加入了def_arg列表中,在呼叫兩次函數之後,預設參數中將有兩個「Hello World」字符串。當使用可變預設參數作為預設值時,注意到這一點非常重要。當我們討論Python資料模型時,將會清楚理解其原因。

2. 關鍵字參數:以「kwarg=value」的形式使用關鍵字參數也可以呼叫函數。其中,kwarg指函數定義中使用的參數名稱。以下面定義的含有預設和非預設參數的函數為例:

為了示範使用關鍵字參數呼叫函數,下面的函數可以以後面的任何一種方式呼叫:

#(

在函數呼叫中,關鍵字參數不得早於非關鍵字參數,所以以下呼叫會失敗:

在上面的範例中,參數arg是位置參數,所以值「test」會被指派給它。而試圖將其再次分配給關鍵字arg,意味著在嘗試多重賦值,而這是非法的。

傳遞的所有關鍵字參數必須符合一個函數接受的參數,而包含非可選參數的關鍵字順序並不重要,所以下面調換了參數順序的寫法是合法的:

3. 任意的參數列表:Python也支援定義這樣的函數,該函數可以接受以元組形式傳遞的任意數量的參數,Python教程中的一個例子如下所示:

任意數量的參數必須在正常參數之後。在本例中,任意數量參數存在於參數file和separator之後。以下是一個呼叫上述定義函數的範例:

上面的參數one、two、three、four、five捆綁在一起共同組成了一個元組,透過參數args就能存取該元組。

解包函數參數

有時候,函數呼叫的參數可能是以元組、列表或字典的形式存在。可以透過使用“*”或“**”操作符將這些參數解包到函數內部以供呼叫。以下面的函數為例,函數接受兩個位置參數,並列印出兩個參數的值。

如果提供給函數的參數值是以列表形式存在,那麼我們可以直接將這些值解包到函數中,如下所示:

有時候,當定義一個函數時,我們之前可能不知道參數的數量。這就導致了下面簽名的函數定義:

在函數呼叫中,普通參數以正常方式提供,而可選參數則可以透過解包的形式到達函數呼叫中。

匿名函數

Python也支援匿名函數,這些函數使用lambda關鍵字建立。 Python中Lambda表達式的形式如下所示:

Lambda表達式傳回評估後的函數對象,並且具有與命名函數相同的屬性。在Python中,Lambda表達式通常只用於非常簡單的函數,如下所示:

上面的lambda表達式的函數與下面命名函數的函數相同:

Nested functions and closures

Defining a function inside a function creates a nested function, as shown below:

以上是Python中的函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在Python數組中存儲哪些數據類型?可以在Python數組中存儲哪些數據類型?Apr 27, 2025 am 12:11 AM

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?Apr 27, 2025 am 12:10 AM

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

Python標準庫的哪一部分是:列表或數組?Python標準庫的哪一部分是:列表或數組?Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

您應該檢查腳本是否使用錯誤的Python版本執行?您應該檢查腳本是否使用錯誤的Python版本執行?Apr 27, 2025 am 12:01 AM

ThescriptisrunningwiththewrongPythonversionduetoincorrectdefaultinterpretersettings.Tofixthis:1)CheckthedefaultPythonversionusingpython--versionorpython3--version.2)Usevirtualenvironmentsbycreatingonewithpython3.9-mvenvmyenv,activatingit,andverifying

在Python陣列上可以執行哪些常見操作?在Python陣列上可以執行哪些常見操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些類型的應用程序中,Numpy數組常用?在哪些類型的應用程序中,Numpy數組常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什麼時候選擇在Python中的列表上使用數組?您什麼時候選擇在Python中的列表上使用數組?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomoGeneData,performance-Caliticalcode,orinterfacingwithccode.1)同質性data:arraysSaveMemorywithTypedElements.2)績效code-performance-calitialcode-calliginal-clitical-clitical-calligation-Critical-Code:Arraysofferferbetterperbetterperperformanceformanceformancefornallancefornalumericalical.3)

所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactsperformance.2)listssdonotguaranteeconecontanttanttanttanttanttanttanttanttanttimecomplecomecomplecomecomecomecomecomecomplecomectacccesslectaccesslecrectaccesslerikearraysodo。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具