草庐IT

包装类

全部标签

python - 使用装饰器更新包装器时遇到错误

在尝试使用装饰器更新函数的包装器时,我遇到了一个相当神秘的(至少对我而言)错误消息。有什么办法可以解决这个问题吗?我已尝试使我的代码尽可能通用,以便它也适用于其他情况。defdecorator(d):"""Makefunctiondadecorator:dwrapsafunctionfn."""def_d(fn):returnfunctools.update_wrapper(d(fn),fn)functools.update_wrapper(_d,d)return_d@decoratordeff(fn):"""Convertsthestringfntoafunctionandretur

python - 如何包装 Python 迭代器以使其线程安全?

因为有时它比围绕队列设计解决方案更实用,所以我想编写一个简单的包装器来使迭代器线程安全。到目前为止,我的灵感来自thesetopics并提出了两个想法:想法1classLockedIterator(object):def__init__(self,it):self._lock=threading.Lock()self._it=it.__iter__()ifhasattr(self._it,'close'):defclose(self):withself._lock:self._it.close()self.__setattr__('close',close)def__iter__(se

python - 如何使用 Python 的 SWIG 正确包装 std::vector<std::size_t>? std::size_t 的问题

我正在尝试获取std::vector与SWIG合作。我需要为C++库提供一个Python接口(interface)。std::vector原始类型和对象的s工作正常,但std::size_t有问题.我在github上提供了一个MCVEhere.主要问题基本上问题是std::size_t未被识别并且std::vector被视为std::vector>*.当我尝试指定模板时,我得到以下信息。使用%template(VecSize)std::vector;给出:swig-c++-pythonc_swig_vec_std_size.i:0:Warning(490):Fragment'SWIG_

python - 参数 num_class 的 xgboost sklearn 包装器值 0 应大于等于 1

我正在尝试使用sklearn提供的XGBClassifier包装器解决多类问题。我的类是[0,1,2],我使用的目标是multi:softmax。当我尝试拟合分类器时,我得到了xgboost.core.XGBoostError:value0forParameternum_classshouldbegreaterequalto1如果我尝试设置num_class参数,我会得到错误gotanunexpectedkeywordargument'num_class'Sklearn会自动设置这个参数,所以我不应该传递那个参数。但为什么会出现第一个错误? 最佳答案

python - pybind11 包装现有代码

我正在尝试使用pybind11包装一个c++库,以便我可以将它与Python3.x一起使用。我尝试使用swig包装代码,但我遇到了一个问题,SWIG会生成cxx文件,但不会读取我引用的header,因此建议我使用pybind11,因为它比swig更好(这个是我知道的意见),但我无法找到有关如何引用/构建项目的资源。我的环境是:Windows10x64Anacondas使用Python3.6构建4.4.0VisualStudios2015Professional(安装了c++)当我为Swig创建我的接口(interface)文件时,我可以做一些简单的事情,比如:```%modulefil

python - 在 Sphinx 文档中保留包装/修饰的 Python 函数的默认参数

如何在修饰函数的文档中用真实签名替换*args和**kwargs?假设我有以下装饰器和装饰函数:importfunctoolsdefmywrapper(func):@functools.wraps(func)defnew_func(*args,**kwargs):print('WrappingHo!')returnfunc(*args,**kwargs)returnnew_func@mywrapperdefmyfunc(foo=42,bar=43):"""ObscureAddition:paramfoo:bar!:parambar:blabla:return:foo+bar"""ret

Python:使用 pre 和 post 方法包装方法调用

我正在实例化一个A类(我正在从某人那里导入否则,所以我不能修改它)到我的X类中。有没有一种方法可以拦截或包装对A中方法的调用?即,在下面的代码中,我可以调用x.a.p1()并得到输出X.preA.p1X.post很多TIA!classA:#inmyrealapplication,thisisanimportedclass#thatIcannotmodifydefp1(self):print'A.p1'classX:def__init__(self):self.a=A()defpre(self):print'X.pre'defpost(self):print'X.post'x=X()x.

c++ - 如何编写函数和成员函数的包装器,在包装函数之前和之后执行一些代码?

我正在尝试编写一些包装器类或函数,使我能够在包装函数之前和之后执行一些代码。floatfoo(intx,floaty){returnx*y;}BOOST_PYTHON_MODULE(test){boost::python::def("foo",);}理想情况下,包装器应该是通用的,适用于具有任何签名的函数和成员函数。更多信息:我正在寻找一种简单的方法来围绕我昂贵的C++调用释放/重新获取GIL,而无需像这样手动编写瘦包装器:floatfoo_wrapper(intx,floaty){Py_BEGIN_ALLOW_THREADSintresult=foo(x,y);Py_END_ALLO

python - 如何获取装饰器包装的函数的源代码?

我想打印由my_decorator包装的my_func的源代码:importinspectfromfunctoolsimportwrapsdefmy_decorator(some_function):@wraps(some_function)defwrapper():some_function()returnwrapper@my_decoratordefmy_func():print"supposedtoreturnthisinstead!"returnprintinspect.getsource(my_func)但是,它返回包装器的源代码:@wraps(some_function)d

将单个语句包装在 try except block 中的 Python 干净方法

我目前正在使用com对Excel进行一些Python自动化。它功能齐全,可以做我想做的事,但我发现了一些令人惊讶的事情。有时,我使用的某些Excel命令会无缘无故地失败并出现异常。其他时候,他们会工作。在我正在做的事情的VB等效代码中,这个问题显然被认为是正常的,并且用OnErrorResumeNext语句覆盖。当然,Python没有said语句。我不能在tryexcept循环中包含整个集合,因为它可能会在中途“失败”并且无法正确完成。那么,将几个独立的语句包装到一个tryexceptblock中的pythonic方法是什么?具体来说,比以下更清洁的东西:try:statementex