![Python函數的概念和使用](http://p2.ttnews.xyz/loading.gif)
函數
為了便於程序的維護和更好的實現模塊化,好的程序都會分解為很多函數。
可以這麼說,對於任何的編程語言,函數都是一個非常重要的概念。
python 不僅簡化了函數的定義過程,而且還大量借鑑了其他函數編程語言中的優秀特性。
本章內容非常重要!
一、 函數的概念和作用
1.1什麼是函數
![Python函數的概念和使用](http://p2.ttnews.xyz/loading.gif)
函數就是把完成特定功能的一段代碼封裝起來。給該功能起一個名字(函數名)。
哪裡需要實現該功能就在哪裡調用該函數。
函數可以在任何時間任何地方調用。
所謂函數,就是把具有獨立功能的代碼塊組織為一個小模塊,在需要的時候調用。
1.2 函數的作用
- 函數是能完成某一功能的代碼段
- 函數是可重複執行的代碼段
- 函數方便管理和維護,便於複用
二、函數的使用
2.1 函數的使用步驟
- 定義函數:封裝獨立的功能
- 調用函數:就是執行函數。(調用幾次就函數執行幾次)
2.2 函數的定義
使用函數之前一定要先定義。
python 的函數定義非常簡單。
函數定義語法:
<code>def 函數名([形參列表]):
函數體
/<code>
說明:
- def 是定義函數的關鍵字。(define function)
- 函數名是這個函數的符號(引用),調用這個函數的時候我們需要函數名。
- 函數名後的圓括號是必須的。
- 形參列表表示我們可以定義多個形參,接受函數調用時傳遞過來的參數。形參不是必須的,根據需要決定是否需要定義形參
- 圓括號後面必須有一個冒號:.
- 新起一行,必須有縮進來定義函數體。函數體就是函數每次調用的時候都會執行的代碼。示例代碼:
<code># 定義無參函數
def show():
print("我是函數內的代碼1")
print("我是函數內的代碼2")
# 定義有參函數,形參在函數內部可以作為普通變量使用。
def show1(a, b):
print(a + b)
/<code>
定義函數名稱的規則:
可以由字母,下劃線,和數字組成數字不能開頭不能與關鍵字重名多個單詞小寫使用下劃線拼接:get_sum
2.3 函數的調用
定義函數的目的是為了讓函數做一些事情。
但是函數如果僅僅定義不會自己去執行。
時刻記住一句話,函數只有被調用才能被執行!
所以想要函數執行,必須顯示的去調用函數。
在使用函數的時候,一定要保證聲明在前,調用在後!
2.3.1 簡單函數調用
函數調用非常簡單,只需要: 函數名(實參)即可。當然如果函數定義的時候沒有形參,則就不用實參。
<code>def show():
print("我是函數內的代碼1")
print("我是函數內的代碼2")
show() # 調用函數
show() # 一個函數可以多次調用。每次調用都會執行一次函數體的代碼
show()
/<code>
2.3.2 帶形參的函數調用
那麼在調用函數的時候應該傳遞相同屬性的參數過去,函數調用的時候的參數,叫做實參!
形參和實參的個數必須匹配,但是有一種情況除外,後面再說。
<code>def add(a, b):
print(a + b)
add(2, 3)
add(20, 3)
/<code>
2.4函數的返回值
我們定義的函數可以完成一個的功能,很多情況下,功能完成之後需要給函數調用者返回一些數據,這些返回的數據就需要用到函數的返回值功能。
返回值就是函數執行完畢後返回給調用處的結果
2.4.1.return的使用
比如:定義一個函數可以實現兩個數的相加,然後返回給調用者計算的結果!
<code>def add(a, b):
pass
n = a + b
return n
print(add(3, 5))
print(add(30, 5))
/<code>
說明:
- 在函數內任何地方都可以出現return。return的作用就是結束函數,並把return後面的值返回給調用者。
- 一旦碰到 return,不管後面有多少代碼,不管是否處於循環中,函數都會立即結束。
- 如果整個函數內部沒有出現return,則函數會自動執行到函數體最後一行代碼。
- 如果函數體內沒有return,則函數運行結束的時候自動返回None
- return後面也可以不跟返回值,這種情況下主要是為了結束函數,也會返回None (return None可以簡寫為return。)
案例1:一個給定的數,判斷是否為質數
分析:定義一個函數,這個給定的數通過參數傳遞,最後結果:是否為質數,通過返回一個bool值給調用者。質數(prime number)又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。
<code>def is_prime(num):
for i in range(2, num):
if num % i == 0:
return False
return True
num = int(input("請輸入一個整數:"))
if is_prime(num):
print("%d 是質數!" % num)
else:
print("%d 不是質數!" % num)
/<code>
案例2:計算輸入的任意兩個數之間所有的質數的和
分析:剛才已經定義了判斷一個是否為質數,現在需要再定義一個可以計算兩個數之間所有的質數的和的函數,並把計算結果返回給調用者。
<code>def is_prime(num):
for i in range(2, num):
if num % i == 0:
return False
return True
def add_prime(num1, num2):
sum = 0
for num in range(num1, num2+1):
if is_prime(num):
sum += num
return sum
num1 = int(input("請輸入第一個整數:"))
num2 = int(input("請輸入第2個整數:"))
print("%d 到 %d 的之間所有的質數的和是:%d" % (num1, num2, add_prime(num1, num2)))
/<code>
2.4.2.返回多個值
使用return一次只能返回一個值。
有些場景下,我們需要返回多個值。這種情況下我們我們可以把返回值的封裝到list或tuple中,接受者拿到這個list或tuple直接解包就可以使用了。
最好封裝在tuple中,因為tuple是不可變的, 所以效率比較高。
<code>def foo(x):
return x ** 2, x ** 3, x ** 4
x = 4
a, b, c = foo(x)
print("%d 的平方是:%d, 3次方式:%d, 4次方是:%d" % (x, a, b, c))
/<code>
2.5 文檔註釋
以前我們使用 # 來我們的代碼添加註釋,只使用單行註釋。
我們定義了一個好函數,函數的描述等信息也應該讓調用者很容易獲取到,這個時候就用到文檔註釋。
文檔註釋將來可以直接生成 api 文檔方便閱讀。
如果要給函數添加文檔註釋,直接在函數內部的首行放置一個字符串即可。字符串可以是單行的(" "或者' '),也可以是是多行的(""" """ 或 ''' ''')。
但是一般使用多行字符串來定義
作為國際慣例:
- 註釋的第一行,一般是對函數的簡述。
- 然後一個空行。
- 然後開始進行詳細描述函數功能等。
<code>def foo(x):
"""該函數是對參數做一些計算
計算參數的多個次冪
:param x: 要計算次冪的數字
:return: 返回2次冪、3次冪、4次冪組成的元組
"""
return x ** 2, x ** 3, x ** 4
print(foo.__doc__) # 打印函數的文檔註釋
/<code>
閱讀更多 編程樂園 的文章