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

繼續閱讀:

Python 101 基礎教學 (7) - Collections:list、tuple
以下要介紹的資料型態是容器類型的 list 與 tuple。容器類型意指它們是可以裝其他資料的資料。每種資料型態,都有不同的目的,在適當時機使用不同的資料型態可以發揮最好的效果。