我有一个带有两个参数的函数,它们相乘得到例如:
的output.saydef func(x, y):
return x * y
如果参数是数字以及参数是数组,则此函数应该能够相乘。 说,它应该适用于
func(5, 6)
和
func([4, 5 ,7], [1, 2, 3])
如果两个参数的类型不同,它应该返回错误(例如:x和y都应该是列表,或者x和y都应该是整数)。我是python的新手,我不知道知道我应该做什么
答案 0 :(得分:1)
您可以使用numpy.array
来计算乘数:
import numpy as np
def func(x, y):
return np.array(x) * np.array(y)
演示:
>>> func(5,6)
30
>>> func([5,3],[6,7])
array([30, 21])
如果您不想使用np.array
,可以使用列表理解和zip
功能:
def func(x, y):
try:
return x * y
except TypeError:
return [i*j for i,j in zip(x,y)]
但请注意,在这种情况下,您的数组应该具有相同的长度。如果它们可能具有可变长度,您可以使用itertools.izip_longest
(在python 3.X zip_longest
中)接受fillvalue
填补错过的值的参数。
答案 1 :(得分:1)
要检查两个对象是否属于同一类型,您可以使用:
def func(x,y):
if type(x) == type(y):
#do something
else:
return "Error"
答案 2 :(得分:1)
检查类型和多重,如果正确:
import numpy as np
def func(x, y):
if type(x) == type(y):
return np.array(x) * np.array(y)
else:
print "not same type: %s, %s" %(type(x), type(y))
答案 3 :(得分:1)
另一种不使用numpy
的方法,使用递归 -
def func(x, y):
if isinstance(x, (list, tuple)) and isinstance(y, (list, tuple)) and len(x) == len(y):
return list(map(func, x ,y)) #You can simply do `map(..)` for Python 2.x
elif isinstance(x, (float,int)) and isinstance(y, (float, int)):
return x * y
else:
raise TypeError("Cannot Multiply")
这也可以处理嵌套列表,当长度不相等或列表嵌套不正确时抛出错误。您可以根据需要更改条件。
演示 -
>>> func(10,20)
200
>>> func([10,11],[20,21])
[200, 231]
>>> func([10,[11,13]],[20,[21, 22]])
[200, [231, 286]]
>>> func([10,11,13],[20,21])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in func
TypeError: Cannot Multiply