python函數(shù)問(wèn)題,個(gè)人突然覺得C語(yǔ)言類型檢查很有用
任務(wù)
首先請(qǐng)定義一個(gè) square_of_sum 函數(shù),它接受一個(gè)list,返回list中每個(gè)元素平方的和。
我的代碼:
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])
完美結(jié)果,正確了。但是引發(fā)我的思考。這里參數(shù)L應(yīng)該就是一個(gè)普通變量,于是我把代碼改成
def square_of_sum(L):
? ? if L>=0:
? ? ? ? return L
? ? else:
? ? ? ? return -L
print square_of_sum(-6)
結(jié)果為6,驗(yàn)證了我的想法。
于是我又仔細(xì)看了第一次函數(shù)的代碼,發(fā)現(xiàn)從這里無(wú)法判斷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))
結(jié)果正確
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]))
結(jié)果正確
所以我明白了,剛才為了完成任務(wù)的函數(shù)代碼,參數(shù)其實(shí)可以為3個(gè)。可以從函數(shù)塊代碼看出來(lái)(只能從這看出來(lái)函數(shù)參數(shù)的類型)
這里只說(shuō)要List為參數(shù),但是多了2個(gè)類型的參數(shù)。
假如我寫了一個(gè)函數(shù)只能接受一個(gè)類型的參數(shù),接受其它類型的參數(shù)返回結(jié)果就不是預(yù)期的了。剛好這個(gè)函數(shù)也可以接受其它參數(shù),但是代碼中不會(huì)報(bào)錯(cuò),這樣程序就會(huì)出現(xiàn)問(wèn)題啊,所以我覺得C語(yǔ)言類型檢查是很用的。
2016-08-07
python里面也有類型檢查的呀,比如你可以在square_of_sum()中定義一下:
if isinstance(L, list): do something,就會(huì)只在L為list類型參數(shù)時(shí)觸發(fā)了
2016-08-07
謝謝,但是如果傳其它參數(shù),不是list,難道要寫報(bào)錯(cuò)代碼?這樣就麻煩了,語(yǔ)言的機(jī)制是沒(méi)有類型檢查的