我真的希望这不是重复的。我试图寻找我的问题,但似乎找不到。在
所以我有一个相当简单的函数,可以将英尺转换为米:
def feetToMeters(val):
return numpy.array(val) * 0.3048
这很好地工作,可以接受int、float、数组和列表。但是,如果我放入一个list(而不是numpy数组),我希望返回一个list。所以我写了这个:
^{pr2}$(或者,如果我想在这里使用numpy
,我可以在最后一行使用return list(numpy.array(val) * 0.3084)
,我不知道这是否重要。)
这是在这里合并duck类型以便避免使用type
函数的最佳方法吗?最初我试过AttributeError
,但没用。尽管如此,我还是对TypeError
感到厌烦,尽管它似乎有用。在
用if type(val) is list
代替是亵渎吗?在
既然你已经使用了numpy,我会避免在这里使用类似于
捕捉类型错误是危险的,因为它可能是由除列表之外的许多因素引起的。为此,我通常使用isinstance(val,list)。在
是的,因为它不适用于list的子类。如果你想走这条路,至少要做
isinstance(val, list)
。这里有一个特别处理列表的解决方案,并将其他所有内容(包括标量和元组)转换为NumPy数组:请注意:
list
子类的实例将导致返回一个普通的list
您可以扩展它来专门处理更多类型,但一般来说,对于要处理的每个类型,您需要编写更多的代码,因为您需要知道如何构造该类型。因此,这种类型转换通常留给客户端代码。在
相关问题 更多 >
编程相关推荐