在本文中怒炸,您將學(xué)習(xí)函數(shù)带饱。 在Python中,函數(shù)是啥阅羹,它的語法是啥樣纠炮,它的組成部分和類型有哪些月趟。 另外,您還將學(xué)習(xí)在Python中如何創(chuàng)建函數(shù)恢口。
1. 函數(shù)是啥孝宗?
在Python中,函數(shù)是一組執(zhí)行特定任務(wù)的相關(guān)語句耕肩。
函數(shù)有助于將我們的程序分解為較小的模塊化塊因妇。 隨著我們的程序變得越來越大,函數(shù)使其變得更有組織性和可管理性猿诸。
此外婚被,它避免了重復(fù),并使代碼可重用梳虽。
其語法為:
def function_name(parameters):
"""docstring"""
statement(s)
上面是一個函數(shù)的定義址芯,函數(shù)包括以下部分:
關(guān)鍵字
def
標(biāo)記函數(shù)頭的開始。一個用于唯一標(biāo)識它的函數(shù)名稱窜觉。 與標(biāo)識符一樣谷炸,函數(shù)的命名也遵循相同的規(guī)則,Python初級教程(02): 關(guān)鍵字和標(biāo)識符禀挫。
參數(shù)(parameters/arguments)旬陡,我們通過這些參數(shù)將值傳遞給函數(shù)。 函數(shù)也可以沒有參數(shù)语婴。
用冒號
:
標(biāo)記函數(shù)頭的結(jié)尾描孟。可選的文檔字符串
Docstring
,用于描述函數(shù)的功能砰左,可參考Python初級教程(03): 語句匿醒、縮進(jìn)和注釋最后的內(nèi)容。組成函數(shù)體的一個或多個python語句缠导。 語句必須具有相同的縮進(jìn)級別(通常為4個空格)廉羔。
可選的
return
語句,用于從函數(shù)中返回一個值酬核。
來看個例子:
def greet(name):
"""This function greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!")
如何在Python中調(diào)用函數(shù)?
定義好函數(shù)后蜜另,我們就可以從程序、或另一個函數(shù)嫡意,甚至直接在Python提示符下調(diào)用它举瑰。 要調(diào)用函數(shù),我們只需鍵入帶有適當(dāng)參數(shù)的函數(shù)名稱即可蔬螟。比如
>>> greet('Paul')
Hello, Paul. Good morning!
調(diào)用函數(shù)的流程示意圖為:
2. 文檔字符串(Docstring)
函數(shù)頭之后的第一個字符串稱為Docstring
此迅,是文檔字符串的縮寫。 它用于簡要說明函數(shù)的功能。
盡管是可選的耸序,但文檔是一種良好的編程習(xí)慣忍些。 除非您的記憶超好,否則請務(wù)必為您的函數(shù)添加適當(dāng)文檔來說明它的功能坎怪。
在上面的示例中罢坝,我們在函數(shù)標(biāo)頭的正下方有一個文檔字符串。 我們通常使用三引號搅窿,以便文檔字符串可以擴(kuò)展到多行嘁酿。 該字符串可作為函數(shù)的__doc__
屬性來使用。
看個例子:
>>> print(greet.__doc__)
This function greets to
the person passed into the
name parameter
3. return 語句
return
語句用于退出函數(shù)并返回到調(diào)用它的位置男应。
它的語法為:
return [expression_list]
該語句可以包含表達(dá)式闹司,表達(dá)式會被求值,并將該值作為返回值沐飘。 如果語句中沒有表達(dá)式或函數(shù)內(nèi)部不存在return
語句游桩,則該函數(shù)將返回None
對象。比如:
>>> print(greet("May"))
Hello, May. Good morning!
None
在這里耐朴,None
是函數(shù)的返回值借卧。
再看個返回值不是None
的例子:
def absolute_value(num):
"""This function returns the absolute
value of the entered number"""
if num >= 0:
return num
else:
return -num
# Output: 2
print(absolute_value(2))
# Output: 4
print(absolute_value(-4))
上面代碼的運行結(jié)果為:
2
4
4. 變量的作用域和生存期
變量作用域是指我們能夠在多大范圍訪問到變量。在函數(shù)內(nèi)部定義的參數(shù)和變量在外部是不可見的隔箍。因此谓娃,它們具有局部作用域脚乡。
變量的生存期是指變量在內(nèi)存中存在的時間蜒滩。函數(shù)中變量的生存期與函數(shù)執(zhí)行的時間一樣長,一旦從函數(shù)返回奶稠,它們就被銷毀了俯艰。
下面是一個說明函數(shù)中變量的作用域的例子:
def my_func():
x = 10
print("Value inside function:", x)
x = 20
my_func()
print("Value outside function:", x)
輸出為:
Value inside function: 10
Value outside function: 20
這里,我們可以看到x
的初始值為20
锌订。即使my_func()
函數(shù)將x
的值更改為10
竹握,它也不會影響函數(shù)之外的x
值。
這是因為函數(shù)內(nèi)部的變量x
與外部的變量x
是不同辆飘。雖然它們有相同的名稱啦辐,但它們是兩個不同的變量,具有不同的作用域蜈项。
另一方面芹关,函數(shù)外部的變量對于函數(shù)內(nèi)部是可見的。外部變量具有全局域紧卒。
我們可以從函數(shù)內(nèi)部讀取這些值侥衬,但不能更改它們。為了能修改函數(shù)外部變量的值,必須使用關(guān)鍵字global
將它們聲明為全局變量轴总。
來看幾個例子:
函數(shù)內(nèi)部可以訪問外部變量:
## variables outside of the function are visible from inside
def my_func():
print("Value inside function:", x)
x = 20
my_func()
print("Value outside function:", x)
輸出為:
Value inside function: 20
Value outside function: 20
函數(shù)內(nèi)部不能更改外部變量:
## We can read these values from inside the function, but cannot change them
def my_func():
x = x + 10
print("Value inside function:", x)
x = 20
my_func()
print("Value outside function:", x)
輸出為:
Traceback (most recent call last):
File "<ipython-input-4-ba393f2e5c59>", line 7, in <module>
my_func()
File "<ipython-input-4-ba393f2e5c59>", line 3, in my_func
x = x + 10
UnboundLocalError: local variable 'x' referenced before assignment
將函數(shù)內(nèi)部變量設(shè)置為global
后直颅,函數(shù)內(nèi)部可以更改外部變量:
## to modify the value of variables outside the function using the keyword global
def my_func():
global x
x = x + 10
print("Value inside function:", x)
x = 20
my_func()
print("Value outside function:", x)
輸出為:
Value inside function: 30
Value outside function: 30
5. 函數(shù)的類型
基本上,我們可以將函數(shù)分為以下兩種類型:
內(nèi)置函數(shù):內(nèi)置于Python中的函數(shù)
用戶自定義的函數(shù):由用戶自己定義的函數(shù)
今天的內(nèi)容就講到這怀樟。
感謝您的閱讀功偿!想了解更多有關(guān)R語言技巧,請關(guān)注我的微信公眾號“R語言和Python學(xué)堂”往堡,我將定期更新相關(guān)文章脖含。