python函數定義結束 python函數定義以什么結束

Python函數和模塊的定義與使用,包括變量的類型及匿名函數用法

函數是組織好,可重復使用的,用來實現相關功能的代碼段

成都創(chuàng)新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計制作、成都網站制作、莫力達網絡推廣、小程序定制開發(fā)、莫力達網絡營銷、莫力達企業(yè)策劃、莫力達品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯為所有大學生創(chuàng)業(yè)者提供莫力達建站搭建服務,24小時服務熱線:028-86922220,官方網址:muchs.cn

函數提高了代碼的重復利用率和應用的模塊性。

除Python自帶的函數之外,也可以自己創(chuàng)建函數,叫做自定義函數

語法:

函數代碼塊以 def 開頭

參數為 輸入值 ,放于函數名后口號里面,

函數內容以冒號:開始,函數體縮進, return 返回 輸出值

函數調用使用關鍵字參數來確定傳入的參數值,此時,如果多個函數則不需要按照指定順序。

在定義函數時,指定參數默認值。調用時如果不傳入參數,則使用默認值

不定長部分如果沒有指定參數,傳入是一個空元組

加了 兩個星號 ** 的參數會以字典的形式導入

/ 用來指明函數形參必須使用指定位置參數,不能使用關鍵字參數的形式。

3.8版本之后的才能使用

不使用 def 定義函數,沒有函數名

lamdba主體時一個表達式,而不是代碼塊,函數體比def簡單很多

定義在函數內部的為局部變量,僅能在函數內部使用

定義在函數外部的為全局變量,可在全局使用

模塊是將包含所有定義的函數和變量的文件,一般將同類功能的函數組和在一起稱為模塊。

模塊需要導入后,在調用相應函數進行使用

模塊導入的方法:

從模塊中導入一個指定的部分

把一個模塊的所有內容全都導入

python函數高級

一、函數的定義

函數是指將一組語句的集合通過一個名字(函數名)封裝起來,想要執(zhí)行這個函數,只需要調用函數名即可

特性:

減少重復代碼

使程序變得可擴展

使程序變得易維護

二、函數的參數

2.1、形參和實參數

形參,調用時才會存在的值

實慘,實際存在的值

2.2、默認參數

定義:當不輸入參數值會有一個默認的值,默認參數要放到最后

2.3、 關鍵參數

定義: 正常情況下,給函數傳參數要安裝順序,不想按順序可以用關鍵參數,只需要指定參數名即可,(指定了參數名的就叫關鍵參數),但是要求是關鍵參數必須放在位置參數(以位置順序確定對應的參數)之后

2.4、非固定參數

定義: 如你的函數在傳入參數時不確定需要傳入多少個參數,就可以使用非固定參數

# 通過元組形式傳遞

# 通過列表形式傳遞

# 字典形式(通過k,value的方式傳遞)

# 通過變量的方式傳遞

三、函數的返回值

作用:

返回函數執(zhí)行結果,如果沒有設置,默認返回None

終止函數運行,函數遇到return終止函數

四、變量的作用域

全局變量和局部變量

在函數中定義的變量叫局部變量,在程序中一開始定義的變量叫全局變量

全局變量作用域整個程序,局部變量作用域是定義該變量的函數

當全局變量與局部變量同名是,在定義局部變量的函數內,局部變量起作用,其他地方全局變量起作用

同級的局部變量不能互相調用

想要函數里邊的變量設置成全局變量,可用global進行設置

五、特殊函數

5.1、嵌套函數

定義: 嵌套函數顧名思義就是在函數里邊再嵌套一層函數

提示 在嵌套函數里邊調用變量是從里往外依次調用,意思就是如果需要調用的變量在當前層沒有就會去外層去調用,依次內推

匿名函數

基于Lambda定義的函數格式為: lambda 參數:函數體

參數,支持任意參數。

匿名函數適用于簡單的業(yè)務處理,可以快速并簡單的創(chuàng)建函數。

# 與三元運算結合

5.3、高階函數

定義:變量可以指向函數,函數的參數可以接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數稱之為高階函數 只需要滿足一下任意一個條件,即是高階函數

接收一個或多個函數作為輸入

return返回另一個函數

5.4、遞歸函數

定義:一個函數可以調用其他函數,如果一個函數調用自己本身,這個函數就稱為遞歸函數

在默認情況下Python最多能遞歸1000次,(這樣設計師是為了防止被內存被撐死)可以通過sys.setrecursionlimit(1500)進行修改

遞歸實現過程是先一層一層的進,然后在一層一層的出來

必須有一個明確的條件結束,要不然就是一個死循環(huán)了

每次進入更深層次,問題規(guī)模都應該有所減少

遞歸執(zhí)行效率不高,遞歸層次過多會導致站溢出

# 計算4的階乘 4x3x2x1

# 打印數字從1-100

5.5、閉包現象

定義:內層函數調用外層函數的變量,并且內存函數被返回到外邊去了

閉包的意義:返回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域,這使得,該函數無論在何處調用,優(yōu)先使用自己外層包裹的作用域

python中函數定義

1、函數定義

①使用def關鍵字定義函數

def 函數名(參數1.參數2.參數3...):

"""文檔字符串,docstring,用來說明函數的作用"""

#函數體

return 表達式

注釋的作用:說明函數是做什么的,函數有什么功能。

③遇到冒號要縮進,冒號后面所有的縮進的代碼塊構成了函數體,描述了函數是做什么的,即函數的功能是什么。Python函數的本質與數學中的函數的本質是一致的。

2、函數調用

①函數必須先定義,才能調用,否則會報錯。

②無參數時函數的調用:函數名(),有參數時函數的調用:函數名(參數1.參數2.……)

③不要在定義函數的時候在函數體里面調用本身,否則會出不來,陷入循環(huán)調用。

④函數需要調用函數體才會被執(zhí)行,單純的只是定義函數是不會被執(zhí)行的。

⑤Debug工具中Step into進入到調用的函數里,Step Into My Code進入到調用的模塊里函數。

在python里什么函數可以讓后面的指令停止執(zhí)行

函數內用 return

函數外用 exit()

說明,函數內也可用 exit() 停止后面的指令執(zhí)行,但這樣會使基于函數的線程出現問題,所以不建議在函數內使用 exit(),函數內如果不想執(zhí)行指令了,最好用 return 進行結束函數,這樣可以把控制權交給主調函數,而不是退出程序

擴展資料:

return語句是python語言中函數返回的一個值,每個函數都應該有一個返回值,其中,return返回值可以是一個數值,一個字符串,一個布爾值,一個列表,或者函數。

在Python中return函數返回值return,函數中一定要有return返回值才是完整的函數,如果用戶沒有定義Python函數返回值,那么得到的結果是None對象。

Python的函數等沒有結束符嗎?

歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《在Python中函數的定義與創(chuàng)建詳解》。本文的主要內容有:函數的定義、函數的定義規(guī)則、函數的創(chuàng)建。

我們在中學的時候,在數學課中學過函數,函數是數學最重要的一個模塊。在Python中,函數的應用非常廣泛。在前面我們已經多次接觸過函數。例如,用于輸出的print()函數,用于輸入的input()函數,以及用于生成一系列整數的range()函數。但這些都是Python內置的標準函數,可以直接使用。除了可以直接使用的標準函數外,Python還支持自定義函數。即通過將一段有規(guī)律的、重復的代碼定義為函數,來達到一次編寫、多次調用的目的。使用函數可以提高代碼的重復利用率。

那什么是函數呢?

1、函數的定義

如果在開發(fā)程序時,需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨立功能的代碼塊組織為一個小模塊,這就是函數。

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。函數的輸入可稱為參數,輸出可稱為返回值。

2、函數的定義規(guī)則

2.1、函數代碼塊要以 def 關鍵詞開頭,后接函數標識符名稱與括號(),同時不要忘記冒號':'的使用

2.2、不主動調用函數時,函數不會被使用

2.3、圓括號之間可以用于定義參數,任何入參數和自變量必須放在圓括號中間。

2.4、函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。

2.5、函數內容以冒號起始,并且縮進。

2.6、return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當于返回 None。

3、函數的創(chuàng)建

創(chuàng)建函數也稱為定義函數,可以理解為創(chuàng)建一個具有某種用途的工具。使用def關鍵字實現,具體的語法格式如下:

def functionname([parameterlist]): ['''comments'''] [functionbody]

參數說明如下:

functionname:函數名稱,在調用函數時使用。

parameterlist:可選參數,用于指定向函數中傳遞的參數。如果有多個參數,各參數間使用逗號“,”分隔。如果不指定,則表示該函數沒有參數。在調用時,也不指定參數。

'''comments''':可選參數,表示為函數指定注釋,注釋的內容通常是說明該函數的功能、要傳遞的參數的作用等,可以為用戶提供友好提示和幫助的內容。

functionbody:可選參數,用于指定函數體,即該函數被調用后,要執(zhí)行的功能代碼。如果函數有返回值,可以使用return語句返回。

站長在線提醒你:

1、函數體“functionbody”和注釋“'''comments'''”相對于def關鍵字必須保持一定的縮進。

2、如果想定義一個什么也不做的空函數,可以使用pass語句作為占位符。

例如,定義一個過濾危險字符的函數filterchar(),代碼如下:

運行上面的代碼,將不顯示任何內容,也不會拋出異常,因為filterchar()函數還沒有調用。

在下一個知識點,站長在線就來講解《在Python中函數的調用》。關注站長在線,學習Python不迷路!歡迎你對站長在線進行關注,評論,點贊,分享、轉發(fā)!

在Python中定義Main函數

目錄

許多編程語言都有一個特殊的函數,當操作系統(tǒng)開始運行程序時會自動執(zhí)行該函數。這個函數通常被命名為main(),并且依據語言標準具有特定的返回類型和參數。另一方面,Python解釋器從文件頂部開始執(zhí)行腳本,并且沒有自動執(zhí)行的特殊函數。

盡管如此,為程序的執(zhí)行定義一個起始點有助于理解程序是如何運行的。Python程序員提出了幾種方式對此進行實現。

本文結束時,您將了解以下內容:

Python中的基本main()函數

一些Python腳本中,包含一個函數定義和一個條件語句,如下所示:

此代碼中,包含一個main()函數,在程序執(zhí)行時打印Hello World!。此外,還包含一個條件(或if)語句,用于檢查__name__的值并將其與字符串"__main__"進行比較。當if語句為True時,Python解釋器將執(zhí)行main()函數。更多關于Python條件語句的信息可以由此獲得。

這種代碼模式在Python文件中非常常見,它將作為腳本執(zhí)行并導入另一個模塊。為了幫助理解這段代碼的執(zhí)行方式,首先需要了解Python解釋器如何根據代碼的執(zhí)行方式設置__name__。

Python中的執(zhí)行模式

Python解釋器執(zhí)行代碼有兩種方式:

更多內容可參考如何運行Python腳本。無論采用哪種方式,Python都會定義一個名為__name__的特殊變量,該變量包含一個字符串,其值取決于代碼的使用方式。

本文將如下示例文件保存為execution_methods.py,以 探索 代碼如何根據上下文改變行為:

在此文件中,定義了三個對print()函數的調用。前兩個打印一些介紹性短語。第三個print()會先打印短語The value __name__ is,之后將使用Python內置的repr()函數打印出__name__變量。

在Python中,repr()函數將對象轉化為供解釋器讀取的形式。上述示例通過使用repr()函數來強調__name__的值為字符串。更多關于repr()的內容可參考Python文檔。

在本文中,您將隨處可見文件(file),模塊(module)和腳本(script)這三個字眼。實際上,三者之間并無太大的差別。不過,在強調代碼目的時,還是存在細微的差異:

“如何運行Python腳本”一文也討論了三者的差別。

基于命令行執(zhí)行

在這類方法中,Python腳本將通過命令行來執(zhí)行。

執(zhí)行腳本時,無法與Python解釋器正在執(zhí)行的代碼交互。關于如何通過命令行執(zhí)行代碼的詳細信息對本文而言并不重要,但您可以通過展開下框閱讀更多有關Windows,Linux和macOS之間命令行差異的內容。

命令行環(huán)境

不同的操作系統(tǒng)在使用命令行執(zhí)行代碼時存在細微的差異。

在Linux和macOS中,通常使用如下命令:

美元符號($)之前的內容可能有所不同,具體取決于您的用戶名和計算機名稱。您鍵入的命令位于$之后。在Linux或macOS上,Python3的可執(zhí)行文件名為python3,因此可以通過輸入python3 script_name.py來運行python腳本。

在Windows上,命令提示符通常如下所示:

根據您的用戶名,之前的內容可能會有所不同,您輸入的命令位于之后。在Windows上,Python3的可執(zhí)行文件通常為python。因此可以通過輸入python script_name.py來運行python腳本。

無論哪種操作系統(tǒng),本文的Python腳本的輸出結果都是相同的。因此本文以Linux和macOS為例。

使用命令行執(zhí)行execution_methods.py,如下所示:

在這個示例中,__name__具有值'__main__',其中引號(')表明該值為字符串類型。

請記住,在Python中,使用單引號(')和雙引號(")定義的字符串沒有區(qū)別。更多關于字符串的內容請參考Python的基本數據類型。

如果在腳本中包含"shebang行"并直接執(zhí)行它(./execution_methods.py),或者使用IPython或Jupyter Notebook的%run,將會獲取相同的結果。

您還可以通過向命令行添加-m參數的方法實現以模塊的方式執(zhí)行。通常情況下,推薦如下方式pip: python3 -m pip install package_name。

添加-m參數將會運行包中__main__.py的代碼。更多關于__main__.py文件的內容可參考如何將開源Python包發(fā)布到PyPI中。

在三種情況中,__name__都具有相同的值:字符串'__main__'。

技術細節(jié):Python文檔中具體定義了__name__何時取值為'__main__'。

當通過標準輸入,腳本或者交互提示中讀取數據時,模塊的__name__將取值為'__main__'。(來源)

__name__與__doc__,__package__和其他屬性一起存儲在模塊的全局命名空間。更多關于屬性的信息可參考Python數據模型文檔,特別是關于模塊和包的信息,請參閱Python Import文檔。

導入模塊或解釋器

接下來是Python解釋器執(zhí)行代碼的第二種方式:導入。在開發(fā)模塊或腳本時,可以使用import關鍵字導入他人已經構建的模塊。

在導入過程中,Python執(zhí)行指定模塊中定義的語句(但僅在第一次導入模塊時)。要演示導入execution_methods.py文件的結果,需要啟動Python解釋器,然后導入execution_methods.py文件:

在此代碼輸出中,Python解釋器執(zhí)行了三次print()函數調用。前兩行由于沒有變量,在輸出方面與在命令行上作為腳本執(zhí)行時完全相同。但是第三個輸出存在差異。

當Python解釋器導入代碼時,__name__的值與要導入的模塊的名稱相同。您可以通過第三行的輸出了解這一點。__name__的值為'execution_methods',是Python導入的.py文件。

注意如果您在沒有退出Python時再次導入模塊,將不會有輸出。

注意:更多關于導入在Python中如何工作的內容請參考官方文檔和Python中的絕對和相對導入。

Main函數的最佳實踐

既然您已經了解兩種執(zhí)行方式上的差異,那么掌握一些最佳實踐方案還是很有用的。它們將適用于編寫作為腳本運行的代碼或者在另一個模塊導入的代碼。

如下是四種實踐方式:

將大部分代碼放入函數或類中

請記住,Python解釋器在導入模塊時會執(zhí)行模塊中的所有代碼。有時如果想要實現用戶可控的代碼,會導致一些副作用,例如:

在這種情況下,想要實現用戶控制觸發(fā)此代碼的執(zhí)行,而不是讓Python解釋器在導入模塊時執(zhí)行代碼。

因此,最佳方法是將大部分代碼包含在函數或類中。這是因為當Python解釋器遇到def或class關鍵字時,它只存儲這些定義供以后使用,并且在用戶通知之前不會實際執(zhí)行。

將如下代碼保存在best_practices.py以證明這個想法:

在此代碼中,首先從time模塊中導入sleep()。

在這個示例中,參數以秒的形式傳入sleep()函數中,解釋器將暫停一段時間再運行。隨后,使用print()函數打印關于代碼描述的語句。

之后,定義一個process_data()函數,執(zhí)行如下五項操作:

在命令行中執(zhí)行

當你將此文件作為腳本用命令行執(zhí)行時會發(fā)生什么呢?

Python解釋器將執(zhí)行函數定義之外的from time import sleep和print(),之后將創(chuàng)建函數process_data()。然后,腳本將退出而不做任何進一步的操作,因為腳本沒有任何執(zhí)行process_data()的代碼。

如下是這段腳本的執(zhí)行結果:

我們在這里看到的輸出是第一個print()的結果。注意,從time導入和定義process_data()函數不產生結果。具體來說,調用定義在process_data()內部的print()不會打印結果。

導入模塊或解釋器執(zhí)行

在會話(或其他模塊)中導入此文件時,Python解釋器將執(zhí)行相同的步驟。

Python解釋器導入文件后,您可以使用已導入模塊中定義的任何變量,類或函數。為了證明這一點,我們將使用可交互的Python解釋器。啟動解釋器,然后鍵入import best_practices:

導入best_practices.py后唯一的輸出來自process_data()函數外定義的print()。導入模塊或解釋器執(zhí)行與基于命令行執(zhí)行類似。

使用__name__控制代碼的執(zhí)行

如何實現基于命令行而不使用Python解釋器導入文件來執(zhí)行呢?

您可以使用__name__來決定執(zhí)行上下文,并且當__name__等于"__main__"時才執(zhí)行process_data()。在best_practices.py文件中添加如下代碼:

這段代碼添加了一個條件語句來檢驗__name__的值。當值為"__main__"時,條件為True。記住當__name__變量的特殊值為"__main__"時意味著Python解釋器會執(zhí)行腳本而不是將其導入。

條件語塊內添加了四行代碼(第12,13,14和15行):

現在,在命令行中運行best_practices.py,并觀察輸出的變化:

首先,輸出顯示了process_data()函數外的print()的調用結果。

之后,data的值被打印。因為當Python解釋器將文件作為腳本執(zhí)行時,變量__name__具有值"__main__",因此條件語句被計算為True。

接下來,腳本將調用process_data()并傳入data進行修改。當process_data執(zhí)行時,將輸出一些狀態(tài)信息。最終,將輸出modified_data的值。

現在您可以驗證從解釋器(或其他模塊)導入best_practices.py后發(fā)生的事情了。如下示例演示了這種情況:

注意,當前結果與將條件語句添加到文件末尾之前相同。因為此時__name__變量的值為"best_practices",因此條件語句結果為False,Python將不執(zhí)行process_data()。

創(chuàng)建名為main()的函數來包含要運行的代碼

現在,您可以編寫作為腳本由從命令行執(zhí)行并導入且沒有副作用的Python代碼。接下來,您將學習如何編寫代碼并使其他程序員能輕松地理解其含義。

許多語言,如C,C++,Java以及其他的一些語言,都會定義一個叫做main()的函數,當編譯程序時,操作系統(tǒng)會自動調用該函數。此函數通常被稱為入口點(entry point),因為它是程序進入執(zhí)行的起始位置。

相比之下,Python沒有一個特殊的函數作為腳本的入口點。實際上在Python中可以將入口點定義成任何名稱。

盡管Python不要求將函數命名為main(),但是最佳的做法是將入口點函數命名為main()。這樣方便其他程序員定位程序的起點。

此外,main()函數應該包含Python解釋器執(zhí)行文件時要運行的任何代碼。這比將代碼放入條件語塊中更好,因為用戶可以在導入模塊時重復使用main()函數。

修改best_practices.py文件如下所示:

在這個示例中,定義了一個main()函數,它包含了上面的條件語句塊。之后修改條件語塊執(zhí)行main()。如果您將此代碼作為腳本運行或導入,將獲得與上一節(jié)相同的輸出。

在main()中調用其他函數

另一種常見的實現方式是在main()中調用其他函數,而不是直接將代碼寫入main()。這樣做的好處在于可以實現將幾個獨立運行的子任務整合。

例如,某個腳本有如下功能:

如果在單獨的函數中各自實現這些子任務,您(或其他用戶)可以很容易地實現代碼重用。之后您可以在main()函數中創(chuàng)建默認的工作流。

您可以根據自己的情況選擇是否使用此方案。將任務拆分為多個函數會使重用更容易,但會增加他人理解代碼的難度。

修改best_practices.py文件如下所示:

在此示例代碼中,文件的前10行具有與之前相同的內容。第12行的第二個函數創(chuàng)建并返回一些示例數據,第17行的第三個函數模擬將修改后的數據寫入數據庫。

第21行定義了main()函數。在此示例中,對main()做出修改,它將調用數據讀取,數據處理以及數據寫入等功能。

首先,從read_data_from_web()中創(chuàng)建data。將data作為參數傳入process_data(),之后將返回modified_data。最后,將modified_data傳入write_data_to_database()。

腳本的最后兩行是條件語塊用于驗證__name__,并且如果if語句為True,則執(zhí)行main()。

在命令行中運行如下所示:

根據執(zhí)行結果,Python解釋器在執(zhí)行main()函數時,將依次執(zhí)行read_data_from_web(),process_data()以及write_data_to_database()。當然,您也可以導入best_practices.py文件并重用process_data()作為不同的數據輸入源,如下所示:

在此示例中,導入了best_practices并且將其簡寫為bp。

導入過程會導致Python解釋器執(zhí)行best_practices.py的全部代碼,因此輸出顯示解釋文件用途的信息。

然后,從文件中存儲數據而不是從Web中讀取數據。之后,可以重用best_practices.py文件中的process_data()和write_data_to_database()函數。在此情況下,可以利用代碼重寫來取代在main()函數中實現全部的代碼邏輯。

實踐總結

以下是Python中main()函數的四個關鍵最佳實踐:

結論

恭喜!您現在已經了解如何創(chuàng)建Python main()函數了。

本文介紹了如下內容:

現在,您可以開始編寫一些非常棒的關于Python main()函數代碼啦!

文章名稱:python函數定義結束 python函數定義以什么結束
文章位置:http://muchs.cn/article32/dooojpc.html

成都網站建設公司_創(chuàng)新互聯,為您提供ChatGPT、Google服務器托管、網站設計公司網站內鏈、微信小程序

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司