В пакете joblib
есть функция delayed
, которая захватывает аргументы, переданные функции. Его можно использовать, например, так:Почему `joblib.delayed` не работает как декоратор?
from joblib import delayed
def f(n):
return n**2
delayed(f)(2)
# (<function f at 0x7f939eb3fe60>, (2,), {})
h = delayed(f)
h(2)
# (<function f at 0x7f939eb3fe60>, (2,), {})
Последнее использование заставляет меня думать, что это можно использовать, Это подтверждается ИТС documentation:
joblib.delayed (функция, check_pickle = True)
декоратор используется для захвата аргументы функции.
Однако это не удается:
from joblib import delayed
@delayed
def g(n):
return n**2
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "/usr/lib/python2.7/dist-packages/joblib/parallel.py", line 158, in delayed
# pickle.dumps(function)
# File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
# raise TypeError, "can't pickle %s objects" % base.__name__
#TypeError: can't pickle function objects
Я попытался это с Python 2.7.12