python函數問題,個人突然覺得C語言類型檢查很有用
任務
首先請定義一個 square_of_sum 函數,它接受一個list,返回list中每個元素平方的和。
我的代碼:
def square_of_sum(L):
? ? sum = 0
? ? for x in L:
? ? ? ? sum = sum + x*x
? ? ? ? return sum
print square_of_sum([1, 2, 3, 4, 5])
print square_of_sum([-5, 0, 5, 15, 25])
完美結果,正確了。但是引發我的思考。這里參數L應該就是一個普通變量,于是我把代碼改成
def square_of_sum(L):
? ? if L>=0:
? ? ? ? return L
? ? else:
? ? ? ? return -L
print square_of_sum(-6)
結果為6,驗證了我的想法。
于是我又仔細看了第一次函數的代碼,發現從這里無法判斷L是不是List,也有可能是set,tuple.
我于是又寫了下面代碼
def square_of_sum(L): ??
? ? sum = 0
? ? for x in L:
? ? ? ? sum = sum + x*x
? ? return sum
print square_of_sum((1, 2, 3, 4, 5))
print square_of_sum((-5, 0, 5, 15, 25))
結果正確
def square_of_sum(L): ??
? ? sum = 0
? ? for x in L:
? ? ? ? sum = sum + x*x
? ? return sum
print square_of_sum(set([1, 2, 3, 4, 5]))
print square_of_sum(set([-5, 0, 5, 15, 25]))
結果正確
所以我明白了,剛才為了完成任務的函數代碼,參數其實可以為3個??梢詮暮瘮祲K代碼看出來(只能從這看出來函數參數的類型)
這里只說要List為參數,但是多了2個類型的參數。
假如我寫了一個函數只能接受一個類型的參數,接受其它類型的參數返回結果就不是預期的了。剛好這個函數也可以接受其它參數,但是代碼中不會報錯,這樣程序就會出現問題啊,所以我覺得C語言類型檢查是很用的。
2016-08-07
python里面也有類型檢查的呀,比如你可以在square_of_sum()中定義一下:
if isinstance(L, list): do something,就會只在L為list類型參數時觸發了
2016-08-07
謝謝,但是如果傳其它參數,不是list,難道要寫報錯代碼?這樣就麻煩了,語言的機制是沒有類型檢查的