我在另需函數或方法作爲自變量的函數使用argspec,並返回這樣的元組:定製佔位符等沒有在python
(("arg1", obj1), ("arg2", obj2), ...)
這意味着第一個參數傳遞函數是arg1,它有一個默認值obj1,依此類推。
這裏是擦:如果它沒有默認值,我需要一個佔位符值來表示這一點。我無法使用無,因爲那時我無法區分沒有默認值和默認值是無。對於False,0,-1等也是如此。我可以用一個元素使它成爲一個元組,但是用於檢查它的代碼將會很難看,我不能輕易將它變成字典。所以,我想我會創造一個無狀物體不是沒有了,這是我想出來的:
class MetaNoDefault(type):
def __repr__(cls):
return cls.__name__
__str__ = __repr__
class NoDefault(object):
__metaclass__ = MetaNoDefault
現在("arg1", NoDefault)
表示ARG1沒有缺省值,我可以做的事情如if obj1 is NoDefault:
等。元類使其打印爲NoDefault
而不是<class '__main__.NoDefault'>
。
有什麼理由不這樣做嗎?有更好的解決方案嗎?
是否有任何理由爲什麼你不能有沒有默認值只有一個元素的元組?類似於:((「arg1」,),(「arg2」,obj2),...)「其中」arg1「沒有默認值。你可以這樣做,如果'len(the_tuple)== 1'等 – Fenikso 2011-05-31 10:05:42
@FMc:爲了避免錯誤來自默認參數的意外修改,最好不要使用可變默認值。 – lunaryorn 2011-05-31 10:07:08
@Fenikso我在我的問題中涵蓋了這種可能性。總之,儘管它很直觀,但我覺得它不夠雅緻。 – 2011-05-31 10:21:07