我覺得算是python裡相對比較進階的一個用法吧,不知道C裡有沒有,這裡的特殊之處是,由於一個介面已經對外公開了,所以我不能修改函數原型,但是另一個接受了一段參數的函數又需要把它接受到的參數傳進已經公開的函數(當然,資料是沒有問題的)因此就需要這樣做
#!/usr/bin/env python# -*- coding: utf-8 -*-'''python裡一個很進階的用法:applyapply接受兩個參數:函數指標和元組(貌似還有其他更進階的用法)apply調用函數指標執行的函數時,把元組拆成參數列表傳遞進函數'''import weburls = ( '/app1', 'App1', '/app2', 'App2', '/app3/(\w*)','App3', '/app4/(\w*)/(\w*)','App4',#約定介面)web.config.debug = Falseapp = web.application(urls, globals())class PageBase: def __init__(self): self.funGET = self.GET self.GET = self.get def get(self,*args): wi = web.input() if hasattr(wi,"id"): self.s = wi.id else: self.s = "hello" #注意apply調用,對於該函數的解釋見代碼頂部 return apply(self.funGET,args)class App1(PageBase): def GET(self): return self.sclass App2(PageBase): def GET(self): return self.sclass App3(PageBase): def GET(self,id): return idclass App4(PageBase): #介面已約定,我無權聲明本函數支援可變參數 def GET(self,id1,id2): return id1+","+id2if __name__ == "__main__": app.run()