在本文中,您將了解函數(shù)、函數(shù)是什么、函數(shù)的語法、構(gòu)成和類型。另外,您還將學(xué)習如何用Python創(chuàng)建函數(shù)。
在Python中,函數(shù)是一組執(zhí)行特定任務(wù)的相關(guān)語句。
函數(shù)有助于將我們的程序分解為較小的模塊。隨著我們的項目越來越大,函數(shù)使其變得更加有組織和易于管理。
此外,它避免了重復(fù)寫相同的代碼,函數(shù)使代碼可重復(fù)使用。
def function_name(parameters): """docstring""" statement(s)
上面顯示的是由以下組件組成的函數(shù)定義。
def標記函數(shù)頭開始的關(guān)鍵字。
用于唯一標識函數(shù)的函數(shù)名稱。函數(shù)命名遵循在Python中編寫標識符的相同規(guī)則。
通過其將值傳遞給函數(shù)的參數(shù)。它們是可選的。
冒號(:)標記函數(shù)頭的結(jié)尾。
可選的文檔字符串(docstring),用于描述函數(shù)的函數(shù)。
組成函數(shù)體的一個或多個有效python語句。語句必須具有相同的縮進級別(通常為4個空格)。
可選的return語句,用于從函數(shù)返回值。
def greet(name): """ 這是一個打招呼的函數(shù), 通過name參數(shù)傳遞, 要打招呼的人名 """ print("Hello, " + name + ". Good morning!")
定義函數(shù)后,我們可以從另一個函數(shù),程序甚至Python提示符中調(diào)用它。要調(diào)用函數(shù),我們只需鍵入帶有適當參數(shù)的函數(shù)名稱即可。
>>> greet('Paul') Hello, Paul. Good morning!
注意:嘗試在帶有函數(shù)定義的Python程序中運行以上代碼,以查看輸出。
def greet(name): """ 這是一個打招呼的函數(shù), 通過name參數(shù)傳遞, 要打招呼的人名 """ print("Hello, " + name + ". Good morning!") greet('Paul')
函數(shù)頭之后的第一個字符串稱為docstring,是文檔字符串的縮寫。簡要說明了函數(shù)的作用。
盡管是可選的,但文檔是一種良好的編程習慣。除非您記得去年今天的晚餐時間和晚餐吃什么,否則請務(wù)必記錄注釋您的代碼。
在上面的示例中,我們在函數(shù)標頭的正下方有一個文檔字符串。我們通常使用三引號將文檔字符串擴展為多行。該字符串可作為__doc__函數(shù)的屬性供我們使用。
例如:
嘗試將以下內(nèi)容運行到Python shell中以查看輸出。
>>> print(greet.__doc__) 這是一個打招呼的函數(shù), 通過name參數(shù)傳遞, 要打招呼的人名
要了解有關(guān)Python中的文檔字符串的更多信息,請訪問Python Docstrings。
return語句用于退出函數(shù)并返回到調(diào)用函數(shù)的位置。
return [expression_list]
該語句可以包含一個表達式,該表達式將被求值并返回值。如果該語句中沒有表達式,或者return語句本身不存在于函數(shù)中,則該函數(shù)將返回None對象。
例如:
>>> print(greet("May")) Hello, May. Good morning! None
None是返回值,因為greet()函數(shù)直接打印名稱,并且沒有使用return語句。
def absolute_value(num): """這個函數(shù)返回輸入數(shù)字的絕對值""" if num >= 0: return num else: return -num print(absolute_value(2)) print(absolute_value(-4))
輸出結(jié)果
2 4
變量的作用域是程序中可以識別該變量的部分。從函數(shù)外部看不到在函數(shù)內(nèi)部定義的參數(shù)和變量。因此,它們具有本地作用域。
變量的生命周期是變量在內(nèi)存中退出的時間。函數(shù)內(nèi)部變量的生命周期與函數(shù)執(zhí)行的時間一樣長。
一旦我們從函數(shù)返回,它們就會被銷毀。因此,函數(shù)無法記住其先前調(diào)用中的變量值。
這是一個示例,用于說明函數(shù)內(nèi)部變量的生命周期。
def my_func(): x = 10 print("函數(shù)內(nèi)部值:",x) x = 20 my_func() print("函數(shù)外部值:",x)
輸出結(jié)果
函數(shù)內(nèi)部值: 10 函數(shù)外部值: 20
在這里,我們可以看到x的初始值為20。即使函數(shù)my_func()將x的值更改為10,它也不會影響函數(shù)外部的值。
這是因為函數(shù)內(nèi)部的變量x與函數(shù)外部的x變量不同。盡管它們具有相同的名稱,但是它們是兩個具有不同作用域的不同變量。
另一方面,從外部可以看到函數(shù)外部的變量。它們具有全局作用域,也就是函數(shù)內(nèi)外部都可以使用該全局變量。
我們可以從函數(shù)內(nèi)部讀取這些值,但不能更改(寫入)它們。如果要在函數(shù)外部修改變量的值,必須使用關(guān)鍵字global,將它們聲明為全局變量。
基本上,我們可以將函數(shù)分為以下兩種類型: