Python 101 基礎教學 (6) - Function 函式
函式 function
我們自定義的一個區塊,區塊裡的程式只有在我們呼叫的時候才會執行。函式的好處包含了可以重複使用之外,也增加了易讀性。
簡單範例如下:我們想要寫一個函式叫 add_one
,它的功用是幫一個數字加一。
# add_one是函式名稱,在使用這個函式時,必須傳入一個參數,我們定義為a
# 當裡面的事情做完時,用"return"把結果回傳出來。
# 函式宣告
def add_one(a):
s = a + 1
return s
# 函式裡的內容在定義完後不會立即執行,他會在我們呼叫的時候執行↓
print(add_one(2)) # output: 3
# 以上的2會當作參數傳進函式裡對應"a", 得到的結果為return的東西(s)
print(add_one(3)) # ouptut: 4
print(add_one(-1)) # output: 0
以上為最簡單的例子。可以看得出來,邏輯複雜的時候我們可以使用函式包起來,因為我們可以定義函式名稱,加強了可讀性。
以下例子用函式實作 Heron's Formula(三角形三邊算面積),用函式包起來後,我們就可以一目瞭然知道 triangle_area
裡的邏輯是算面積。
# 公式參考 https://en.wikipedia.org/wiki/Heron%27s_formula
def triangle_area(a, b, c):
s = (a + b + c) / 2
area = (s * (s - a) * (s - b) * (s - c)) ** (1/2)
return "%.2f" % area # 取小數後兩位並以字串表示
print(triangle_area(3, 4, 5)) # output: 6.00, 3,4,5傳進函式裡對應a,b,c
print(triangle_area(6, 6, 6)) # output: 15.59
# 更多例子
# 函式不一定要指定參數,也不一定回傳東西
def say_hi():
print('hi')
say_hi() # output: hi, 不需要用print,因為他在函式裡已經print了
def is_dog(animal):
return animal == 'dog'
print(is_dog('cat')) # output: False
print(is_dog('dog')) # output: True
print(is_dog('dog ')) # output: False, 多了一個空白 'dog ' != 'dog'
預設參數 Default Parameter
我們可以使用預設參數 =
,在宣告函式時給出預設參數後,如果外面沒傳參數進來時,程式會使用預設參數。
def greeting(name = ''):
if name:
print('How are you? I am %s' % name)
else:
print('How are you?')
greeting('Mike') # output: How are you? I am Mike
greeting() # output: How are you?
def from_country(country = 'Taiwan'):
print('I am from %s' % country)
from_country() # output: I am from Taiwan
from_country('Japan') # output: I am from Japan
任意參數 Arbitrary Arguments
有分 *args
與 **kwargs
,有興趣的人可以查看這裡,分別是把參數收集到arg (list) 與 kwargs (dict)。這邊先不討論。
Pass
當宣告函式的時候,你需要用 Indentation 建立你的 Scope,但如果你的函式裡面沒有內容的時候,你就需要用 pass
# 這樣會報錯,因為函式裡沒東西,程式無法順利解讀
def foo():
print('something')
# ok
def foo():
pass
你可能會問什麼為什麼會用到pass?pass 不只在函式裡可以用,人和會建立Scope的語法都可以用。例如 if else, try catch。有時後當你程式還沒想好切確邏輯,只想先定義出來的時候,也可以暫放 pass。
# 會產生Scope的語法,pass可能都有些作用
if True:
pass
try:
print('try')
catch Exception:
pass
參考:https://www.w3schools.com/python/python_functions.asp
繼續閱讀: