如果您要在很多函数中执行此操作,则可以使用 Python 装饰器。这是一个简单但有用的方法。
def threads_over_lists(fn):
def wrapped(x, *args, **kwargs):
if isinstance(x, list):
return [fn(e, *args, **kwargs) for e in x]
return fn(x, *args, **kwargs)
return wrapped
这样,只需添加行@threads_over_lists
在你的函数让它以这种方式运行之前。例如:
@threads_over_lists
def add_1(val):
return val + 1
print add_1(10)
print add_1([10, 15, 20])
# if there are multiple arguments, threads only over the first element,
# keeping others the same
@threads_over_lists
def add_2_numbers(x, y):
return x + y
print add_2_numbers(1, 10)
print add_2_numbers([1, 2, 3], 10)
您还应该考虑是否希望仅在列表上进行矢量化,还是在其他可迭代对象(如元组和生成器)上进行矢量化。This https://stackoverflow.com/questions/1952464/in-python-how-do-i-determine-if-a-variable-is-iterable是一个有用的 StackOverflow 问题,可以用来确定这一点。不过要小心 - 字符串是可迭代的,但您可能不希望函数对其中的每个字符进行操作。