【Python】Python - Python 函數。Python Functions.
【Python】Python - Python 函數。Python Functions.
函數是個程式碼區塊,這個程式碼區塊僅在被呼叫時執行。你可以傳遞參數給函數。函數會回傳結果資料回來。
建立一個函數
Python的函數使用def keyword去定義:
範例
def my_function():
print("Hello from a function")
呼叫一個函數
要呼叫函數,使用函數名稱及參數即可:
範例
def my_function():
print("Hello from a function")
my_function()
上面輸出: Hello from a function
參數
傳遞入函數的資料稱為參數。
參數的設定在函數名稱後面括弧裡面。你可以增加許多你需要的參數,只要將那些參數使用逗號分隔開來。
下面的範例為函數傳遞一個參數fname。當函數被呼叫,會傳遞名字入函數,這個名字參數可以在函數內使用,範例為列印完整的姓名。
範例
def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
上面輸出:
Emil Refsnes
Tobias Refsnes
Linus Refsnes
參數(Arguments)在Python文件中通常縮寫為args。
參數(Parameters or Arguments)?
參數為傳遞資訊入函數的部分。
來自一個函數的觀點:
A parameter為在函數定義的中括弧內的變數。
An argument為一個值,當函數被呼叫時會送入函數的值。
Arguments的數量
預設值,函數呼叫時的參數數量必須正確的。表示如果函數需要2個參數,則必須要呼叫函數包含2個參數,不可多也不可少。
範例
函數需要2個參數,則送入2個參數:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
上面輸出: Emil Refsnes
如果你試著傳遞參數僅傳遞1個或傳遞3個,你將會得到錯誤訊息。
範例
這個函數期待2個參數,但僅傳遞1個參數:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil")
上面輸出:
Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: my_function() missing 1 required positional argument: 'lname'
隨意參數, *args
如果函數在定義時無法確切知道有多少參數需要傳入,在定義函數時可以使用*在參數名稱前面。
這個方式定義參數,函數會收到一個tuple的參數。
範例
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
上面輸出:
The youngest child is Linus
在Python文件中,隨意參數通常簡寫為 *args。
關鍵字參數
Keyword Arguments
在Python中可以設定key=value 語法傳遞參數。使用這個方式傳遞參數則參數的順序不需要考慮。
範例
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
上面輸出:The youngest child is Linus
Python文件中,通常將參數簡寫為kwargs。
隨意參數 **kwargs
(在C語言*表示c字串,**表示多個c字串。這個寫法與C語言觀念類似。)
如果無法知道有多少關鍵字參數需要傳入函數,則使用**在參數前面。
這個方式可以收到一個dictionary的參數,且可以使用裡面的每個items。
範例
如果參數不曉得,則在參數前面增加**符號。
def my_function(**kid):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
上面輸出:His last name is Refsnes
在Python文件中,隨意Kword參數通常簡寫為**kwargs。
預設參數值
下面的範例顯示如何使用預設參數值。
如果我們呼叫函數不使用參數,就會使用預設值:
範例
def my_function(country = "Norway"):
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
上面輸出:
I am from SwedenI am from IndiaI am from NorwayI am from Brazil
傳遞參數List
你可以傳遞資料格式為字串、數字、list、dictionary...等,且在函數中這個傳遞方式的參數將會被視為相同資料型態。
e.g. 如果你傳遞List為參數,在函數內則可以使用List。
Example
def my_function(food):
for x in food:
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
上面輸出:
applebananacherry
回傳值
使用return statement可以使函數有回傳值:
範例
def my_function(x):
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
上面輸出:
152545
關於pass描述式
function
的定義不可為空,但如果因為某些理由需要一個沒有內容的函數,可以使用pass 描述式來避免直譯器的錯誤訊息。
範例
def myfunction():
pass
遞迴(Recursion)
Python也支援函數的遞迴,表示定義的函數可以呼叫自己。
遞迴也是一個普遍的數學與程式觀念。表示函數呼叫自己。好處在可以使用迴圈去傳遞資料給函數得到結果,有減少程式碼長度的好處。
開發者應該要非常注意遞迴非常容易使函數進入無窮迴圈,或記憶體使用超過機器的容量。然而,當寫了正確的遞迴函數,可以使用在數學上比較優雅的方式來寫程式。
下面的範例tri_recursion() 是一個函數使用遞迴方式呼叫自己,我們使用k 變數傳遞資料,每次遞迴則減少1。遞迴結束則參數不再大於0。
對於新的開發者,可能會花比較多的時間在讓遞迴正確的工作,最好的方式為測試並修改。
範例
遞迴範例
def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
上面輸出:
Recursion Example Results13610152121
留言
張貼留言