【发布时间】:2019-07-04 06:17:22
【问题描述】:
我正在编写一个小型应用程序,它接受用户的输入,为他们提供一组最佳参数以供使用。 (这些集合中的每一个都被排名,用户可以选择他们想要使用的任何一个)
为了能够做到这一点,我从一组选项中选择一个函数(取决于上下文),使用functools.partial 部分填充函数,然后将部分对象返回到另一个模块,该模块又调用 C++ 库( dlib),它有一个 python 接口。
直到今天,我还没有使用 functools.partial 来填充函数并且没有遇到任何问题。但是为了减少代码的重复性和易于理解,我将其添加进去。添加该部分后,我收到以下错误:
AttributeError: 'functools.partial' 对象没有属性 '__code__'
我阅读了一些帖子并意识到这是partial 对象的问题,因为它们通常缺少__name__、__module__ 等属性,但我不确定如何解决此问题。
PS:我使用的是 python 3.7
编辑
我正在添加一个重现错误的小代码
from functools import partial
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_breast_cancer
from dlib import find_max_global
def objective_calculator(*args, X, y):
args = args[0]
model = LogisticRegression()
model.set_params(**{'class_weight': args[0], 'max_iter':args[1]})
model.fit(train['data'], train['target'])
predictions = model.predict(X)
return accuracy_score(y, predictions)
train = load_breast_cancer()
obj_calc = partial(objective_calculator, X=train['data'], y=train['target'])
lower_bounds = [0.1, 10] # class_weight, max_iter
upper_bounds = [0.5, 200] # class_weight, max_iter
is_integer_variable = [False, True]
find_max_global(f=obj_calc,
bound1=lower_bounds,
bound2=upper_bounds,
num_function_calls=2,
is_integer_variable=is_integer_variable,
solver_epsilon=1,)
运行上面的代码导致如下错误
AttributeError: 'functools.partial' 对象没有属性 '__code__'
是否建议手动将__code__ 属性添加到部分对象?
【问题讨论】:
-
显示出现此错误的代码。
-
@furas,代码是更大代码库的一部分。我需要一些时间来生成一个 mvc 代码。
-
@furas,我在编辑部分添加了一个小代码。请看一下
-
@furas,也许你可以帮忙解决这个问题stackoverflow.com/questions/56882865/…
标签: python python-3.x partial functools