有时在我的代码中,我有一个函数可以通过两种方式之一接受参数。例如:
def func(objname=None, objtype=None):
if objname is not None and objtype is not None:
raise ValueError("only 1 of the ways at a time")
if objname is not None:
obj = getObjByName(objname)
elif objtype is not None:
obj = getObjByType(objtype)
else:
raise ValueError("not given any of the ways")
doStuffWithObj(obj)
有没有更优雅的方法来做这件事?如果参数可以以三种方式之一出现怎么办?如果类型是不同的,我可以这样做:
def func(objnameOrType):
if type(objnameOrType) is str:
getObjByName(objnameOrType)
elif type(objnameOrType) is type:
getObjByType(objnameOrType)
else:
raise ValueError("unk arg type: %s" % type(objnameOrType))
但如果它们不是呢?这种替代方案似乎很愚蠢:
def func(objnameOrType, isName=True):
if isName:
getObjByName(objnameOrType)
else:
getObjByType(objnameOrType)
因为这样你必须像这样调用它:func(mytype, isName=False)
,这很奇怪。