函式最重要的目的是方便我們重複使用相同的一段程式。
將一些操作隸屬於一個函式,以後你想實現相同的操作的時候,只用呼叫函式名就可以,而不需要重複敲所有的語句。
 
函式的定義
首先,我們要定義一個函式, 以說明這個函式的功能。

def square_sum(a,b):
c = a**2 + b**2
return c

這個函式的功能是求兩個數的平方和。
首先,def,這個關鍵字通知 python:我在定義一個函式。 square_sum 是函式名。
括號中的 a, b 是函式的引數,是對函式的輸入。引數可以有多個,也可以完全沒有(但括號要保留)。
我們已經在迴圈和選擇中見過冒號和縮排來表示的隸屬關係。
c = a**2 + b**2        # 這一句是函式內部進行的運算
return c               # 返回 c 的值,也就是輸出的功能。 Python 的函式允許不返回值,也就是不用 return 。
return 可以返回多個值,以逗號分隔。相當於返回一個 tuple(定值表) 。
return a,b,c          # 相當於 return (a,b,c)
 
在 Python 中,當程式執行到 return 的時候,程式將停止執行函式內餘下的語句。 return 並不是必須的,當沒有 return, 或者 return 後面沒有返回值時,函式將自動返回 None 。 None 是 Python 中的一個特別的資料型別,用來表示什麼都沒有,相當於 C 中的 NULL 。 None 多用於關鍵字引數傳遞的預設值。
 
函式呼叫和引數傳遞
定義過函式後,就可以在後面程式中使用這一函式

print square_sum(3,4)

Python 透過位置,知道 3 對應的是函式定義中的第一個引數 a, 4 對應第二個引數 b,然後把引數傳遞給函式 square_sum 。
(Python 有豐富的引數傳遞方式,還有關鍵字傳遞、表傳遞、字典傳遞等,基礎教程將只涉及位置傳遞)
函式經過運算,返回值 25, 這個 25 被 print 列印出來。
 
我們再看下面兩個例子

a = 1

def change_integer(a):
a = a + 1
return a

print change_integer(a)
print a

#===(Python 中 “#” 後面跟的內容是註釋,不執行 )

b = [1,2,3]

def change_list(b):
b[0] = b[0] + 1
return b

print change_list(b)
print b

第一個例子,我們將一個整數變數傳遞給函式,函式對它進行操作,但原整數變數 a 不發生變化。
第二個例子,我們將一個表傳遞給函式,函式進行操作,原來的表 b 發生變化。
對於基本資料型別的變數,變數傳遞給函式後,函式會在記憶體中複製一個新的變數,從而不影響原來的變數。(我們稱此為值傳遞)
但是對於表來說,表傳遞給函式的是一個指標,指標指向序列在記憶體中的位置,在函式中對錶的操作將在原有記憶體中進行,從而影響原有變數。(我們稱此為指標傳遞)
 
總結

def function_name(a,b,c):
statement
return something  # return 不是必須的

函式的目的: 提高程式的重複可用性。
return     None
透過位置,傳遞引數。
基本資料型別的引數:值傳遞
表作為引數:指標傳遞
 
練習:
寫一個判斷閏年的函式,引數為年、月、日。若是是閏年,返回 True
 
 
文章來自網際網路部落格網站:http://www.cnblogs.com/vamei