草庐IT

wrap_iter

全部标签

python list __iter__ 方法在每个循环中调用?

我正在尝试创建一个继承自python列表的类。我希望在列表的每个循环中初始化/完成列表的元素。我认为这可以通过覆盖python列表的__iter__方法来完成,但我似乎无法让它工作。__iter__方法似乎只调用了一次?(见下文)classMyList(list):def__iter__(self):print'dosomething'returnlist.__iter__(self)my_list=MyList(range(10))printmy_listforiteminmy_list:printitem输出[0,1,2,3,4,5,6,7,8,9]dosomething01234

python - 为什么一个类需要 __iter__() 来返回一个迭代器?

为什么类需要定义返回自身的__iter__(),以获得类的迭代器?classMyClass:def__init__(self):self.state=0def__next__(self):self.state+=1ifself.state>4:raiseStopIterationreturnself.statemyObj=MyClass()foriinmyObj:print(i)控制台日志:Traceback(mostrecentcalllast):foriinmyObj:TypeError:'MyClass'objectisnotiterable答案https://stackover

c++ - Boost.Python : Wrap functions to release the GIL

我目前正在使用Boost.Python,希望获得一些帮助来解决棘手的问题。上下文当C++方法/函数暴露给Python时,它需要释放GIL(全局解释器锁)以让其他线程使用解释器。这样,当python代码调用C++函数时,解释器可以被其他线程使用。现在,每个C++函数如下所示://module.cppintmyfunction(std::stringquestion){ReleaseGILunlockGIL;return42;}为了通过它来boostpython,我这样做://python_exposure.cppBOOST_PYTHON_MODULE(PythonModule){def(

python - itertools.chain 链接一个 iter 列表?

importitertoolsdef_yield_sample():it=iter(itertools.combinations('ABCD',2))it2=iter(itertools.combinations('EFGH',3))itc=itertools.chain(it,it2)forxinitc:yieldxdefmain():forxin_yield_sample():printx这可以打印组合。>>>('A','B')('A','C')('A','D')...但是这个:def__position_combination(_count=[2,3,4,5]):its=[]fo

python - Matplotlib ArtistAnimation 给出 TypeError : 'AxesImage' object is not iterable

这个问题在这里已经有了答案:matplotlibimshow():howtoanimate?(2个答案)关闭6年前。你能帮我弄清楚这里的问题是什么吗?我不知道出了什么问题。img中的单个绘图可以很好地绘制,但动画模块会出错。回溯说:Traceback(mostrecentcalllast):File"/home/ckropla/workspace/TAMM/Sandkasten.py",line33,inani=animation.ArtistAnimation(fig,img,interval=20,blit=True,repeat_delay=0)File"/home/ckropl

python - 理解 : multiple values per iteration

有没有办法在列表/字典/集合理解中每次迭代输出两个(或更多)项目?举个简单的例子,输出1到3整数的所有正负double值(即{x|x=±2n,n∈{1...3}}),是否有类似下面的语法?>>>[2*i,-2*iforiinrange(1,4)][2,-2,4,-4,6,-6]我知道我可以输出(+i,-i)的元组并将其展平,但我想知道是否有任何方法可以使用单一理解完全解决问题。目前,我正在生成两个列表并将它们连接起来(这有效,前提是顺序不重要):>>>[2*iforiinrange(1,4)]+[-2*iforiinrange(1,4)][2,4,6,-2,-4,-6]

python - 为什么 `__iter__` 定义为实例变量时不起作用?

如果我按如下方式定义__iter__方法,它将不起作用:classA:def__init__(self):self.__iter__=lambda:iter('text')foriinA().__iter__():print(i)iter(A())结果:textTraceback(mostrecentcalllast):File"...\mytest.py",line10,initer(A())TypeError:'A'objectisnotiterable如您所见,调用A().__iter__()有效,但A()不可迭代。但是,如果我为类定义__iter__,那么它将起作用:class

c++ - SWIG C++ Python : wrapping int by reference or pointer

我正在尝试将一些C++函数包装到Python包装器中。为此,SWIG似乎是一种不错且简单的方法。换行有效,但我在通过引用或指针传递整数时遇到问题。由于Python无法使用引用,SWIG在内部将它们转换为指针。一些简单的示例代码:布拉特.hpp:#ifndef__BLAAT_HPP__#define__BLAAT_HPPclassBlaat{public:intmA;floatmB;public:Blaat(){}voidgetA(int&fA);voidsetA(constintfA);~Blaat(){}};#endif//__BLAAT_HPP__Blaat.cpp#include

python 模拟 : @wraps(f) problems

我想测试我写的一个简单的装饰器:看起来像这样:#utilities.pyimportother_moduledefdecor(f):@wraps(f)defwrapper(*args,**kwds):other_module.startdoingsomething()try:returnf(*args,**kwds)finally:other_module.enddoingsomething()returnwrapper然后我使用python-mock测试它:#test_utilities.pydeftest_decor(self):mock_func=Mock()decorated_

python - 突然在运行测试时我得到 "TypeError: ' NoneType' object is not iterable

这对我来说非常奇怪,直到今天早上一切都运行良好。当我尝试使用以下命令运行我的单元测试时(我将Python3软链接(softlink)到python)clear;pythonmanage.pytestlisttests/我现在收到以下错误消息:Traceback(mostrecentcalllast):File"manage.py",line10,inexecute_from_command_line(sys.argv)File"/usr/lib/python3.4/site-packages/django/core/management/__init__.py",line385,ine