6. 函式
(1) Python的函式使用def關鍵字來宣告,且不需要像C++一樣在宣告時寫下回傳值的資料型態,而函式內容的程式碼也不需要像C++一樣用大括號包起來。其語法為:
def 函式名稱(參數一, 參數二, 參數三…):
#函式內容
return 回傳值 # 函式不一定要設有回傳值,視程式設計者需要而定
要注意,在Python中,分辨各個層次不是以大括號,而是用縮排(縮排通常是用按一次<tab>鍵的方式)。以上的#函式內容和def兩行之間相差一個<tab>鍵。
如以下函式,判斷a是否為奇數:
def is_odd(a):
if a%2==1:
return True
else:
return False
(2) 函式的輸入參數,其數目可以是不定的,這使得函式的設計變得更有彈性。此種設計需使用到*符號,如以下範例,是用來寫出一個多項式(polynomial)的形式:
def show_polynomial(*pars):
r=""
for i in range(0, len(pars), 1):
if i==0:
r+=str(pars[i])
else:
r+=str(pars[i])+"*x^"+str(i)
if (i!=len(pars)-1):
r+="+"
return r
s=show_polynomial(1,2,3)
print(s)
執行後顯示:
1+2*x^1+3*x^2
(3) python中函式可回傳多個變數,且這些變數的資料型態可以互不相同。這些變數以一個稱為Tuple的形式來包裝。如以下範例,是在描述一個數字的特性:
def get_num_info(a):
s=""
if (a%2==1):
s="奇數"
else:
s="偶數"
n=1
b=a
while(b>10):
b=b/10
n=n+1
is_negative=True
if(a<0):
is_negative=True
else:
is_negative=False
return (s,n,is_negative) #(s,n,is_negative)就是所謂的Tuple形式
a,b,c = get_num_info(13) # a,b,c為回傳的Tuple內容,a、b、c的名稱可以自訂
print(a)
print(str(b)+"位數")
print("是負數嗎?"+str(c))
執行後顯示該數字的特性:
奇數
2位數
是負數嗎?False
(4) python當中,函式可以被當作物件看待,因此一個函式也能被當作另一個函式的輸入參數。如以下範例,有三個數學多項式函式:function1、function2、function3,而compare函式則是用來比較任意二多項式函式在某個點x上,其函數值誰大誰小:
def function1(a):
return 2*a*a-9*a+10
def funtion2(a):
return 3*a+6
def function3(a):
return a*a*a-10*a
def compare(f1,f2,a):
print ("at",a,":")
print ("f1=",f1(a),", f2=",f2(a))
if f1(a)>f2(a):
print("f1>f2")
elif f1(a)<f2(a):
print("f1<f2")
elif f1(a) == f2(a):
print("f1=f2")
compare (function1, function3, 5)
執行後顯示:
at 5 :
f1= 15 , f2= 75
f1<f2