我在另需函数或方法作为自变量的函数使用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