我的最终目标是将所有数字输入转换为numpy数组并确保它们具有正确形状的有效方法。
以下是我正在考虑的行为:
IOException
当然,问题在于您无法在Python 3.X中更新本地人。所以我想我的问题可归纳如下:
答案 0 :(得分:2)
如果您只是希望函数的所有参数都转换为np.array
,那么使用装饰器会非常有帮助。
import numpy as np
def np_decorator(func):
def wrapper(*args, **kwargs):
# silently convert arguments to np.array
new_args = [np.array(x) for x in args]
new_kwargs = {k: np.array(v) for k,v in kwargs.items()}
# actual execution when called
func(*new_args, **new_kwargs)
return wrapper
@np_decorator
def test_func(a, b):
print(type(a), type(b))
test_func([2], [5])
# <class 'numpy.ndarray'> <class 'numpy.ndarray'>
虽然我确实认为有时你不需要转换所有的论点。您可以调整装饰器以满足您的需要。例如。仅转换*args
但保持**kwargs
不变。
答案 1 :(得分:1)
你不是。如果你接受了这么多论证,那么样板很大,你做错了。
你做
def sanitize(x):
# do sanitation things
return new_x
def test_func(a, b):
a = santize(a)
b = santize(b)