Skip to content

控制程式流程—自訂函數

基本寫法

def f(x, y):
    return x**y
for i in range(5):
    print(f(i, 2), end=" ")

output:
0 1 4 9 16

全域變數(global)

請看程式碼:

def f(x):
    y = x - 3
    if y < 0:
        return 2 * x + 1
    return x - 1

y = -1
print(f(3), y) # 2 -1

這和 C++ 一樣,f 裡面的 y 會暫時覆蓋全域的 y

要如何用到主程式中的變數呢?我們可以透過全域變數,如果副程式中想用到的主程式
中的變數,可以用 global 的將它宣告成全域變數。

def f(x):
    global y  # 不覆蓋外面的 y,也就是使用全域的 y
    y = x - 3
    if y < 0:
        return 2 * x + 1
    return x - 1

y = -1
print(f(3), y) # 2 0

這樣就能在函數中修改全域的 y。

此外,如果副程式中並未定義 y(沒給 y 的值)就拿來使用,這時候就會到主程式中找,好比在某個學校內找不到吳邦一,就擴大範圍到校外找。

不要使用含混不明的用法,那是給自己找麻煩。使用到全域變數就清楚宣告。全域變數在大型軟體中是不好的方式需要必盡量避免,但是在考試與比賽這種解題程式中,是一個很方便的方式,但不要混淆否則就是給自己找麻煩。

遞迴