Python 3.1 快速導覽 - 函數

函數 (function) 物件 (object) 可以執行一些工作,或是進行計算。 Python 中定義函數使用關鍵字 (keyword) def ,其後空一格接函數的識別字 (identifier) 名稱加小括弧,然後冒號,如

def function_name():
    pass


pass 為關鍵字之一,其為甚麼事情都不做的陳述 (statement) 。


函數內容的部份須縮排 (indentation) ,縮排的區塊 (block) 專屬於函數,如下定義的 fun() 函數,印出遞增的數字
def fun():
    i = 0
    while i < 6:
        print(i)
        i += 1

fun()
fun()
fun()

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:cf13.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



fun() 函數從 0 逐行遞增 1 印到 5 ,底下沒有縮排的地方一共呼叫 (call) fun() 三次,因此一連印出 18 個數字。


i 為 fun() 函數內的區域變數 (local variable) , fun() 之外的地方無法存取 i 的值,例如
def fun():
    i = 0
    while i < 6:
        print(i)
        i += 1

fun()
print(i)

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:def02.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


會發生如下的執行錯誤



這是因為直譯器 (interpreter) 在 fun() 函數的區塊內才認得變數 i ,離開函數的地方,直譯器便不認識這個名稱。


模組 (module) 也就是 .py 檔案中定義函數,需注意先有函數定義,才可進行函數呼叫。如將上例函數定義與呼叫的順需顛倒,如下
fun()
fun()
fun()

def fun():
    i = 0
    while i < 6:
        print(i)
        i += 1

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:def03.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


會發生如下的執行錯誤



因為 Python 直譯器從頭一行一行的解譯程式原始碼 (source code) , fun() 既非 Python 的內建名稱,也還沒解譯到底下定義的部份,因此直譯器直接發生 NameError ,終止程式的進行。


中英文術語對照
函數function
物件object
關鍵字keyword
識別字identifier
陳述statement
縮排indentation
區塊block
呼叫call
區域變數local variable
直譯器interpreter
模組module
原始碼source code






沒有留言: