python 重載 overload
python不支持重載。習慣JAVA重載的寫作方式就要花點心思。每一種程式都有其思考的方式,也是該學習。不支持重載的python是如何思考的呢?
主要的問題還是在於python的參數型態不需要宣告。這是很方便的設計,但在重載上就會出問題。例如
def test(a, b):
print a*b
def test(a, b):
xFile = open(b, 'r')
xFile.write(a)
xFile.close()
當程式出現這樣的寫法,後者的 test 會覆蓋前者。如果python支持重載,就必需要能進一步在編譯時判斷a是什麼,b是什麼。再決定使用那一個test。這也不是作不到,但以script語言來說,要付出一定的代價。語法也不再精簡。
兩個比較可行的方法
def test(a, b =1):
print a*b
這樣使用時,可選擇只給a,或 a 與 b同時給。
test(2)
印出 2
test(2,3)
印出 6
另一種方法就是用星號
def test(*a):
for i in a:
print i
這樣就不限制使用的參數數量
test(1,2,3,5)
印出
1
2
3
5
test(2,"good",5)
印出
2
good
5
主要的問題還是在於python的參數型態不需要宣告。這是很方便的設計,但在重載上就會出問題。例如
def test(a, b):
print a*b
def test(a, b):
xFile = open(b, 'r')
xFile.write(a)
xFile.close()
當程式出現這樣的寫法,後者的 test 會覆蓋前者。如果python支持重載,就必需要能進一步在編譯時判斷a是什麼,b是什麼。再決定使用那一個test。這也不是作不到,但以script語言來說,要付出一定的代價。語法也不再精簡。
兩個比較可行的方法
def test(a, b =1):
print a*b
這樣使用時,可選擇只給a,或 a 與 b同時給。
test(2)
印出 2
test(2,3)
印出 6
另一種方法就是用星號
def test(*a):
for i in a:
print i
這樣就不限制使用的參數數量
test(1,2,3,5)
印出
1
2
3
5
test(2,"good",5)
印出
2
good
5
留言
張貼留言