Python 如果没有iter方法,如何使用迭代器?

Python 如果没有iter方法,如何使用迭代器?,python,methods,iterator,maya-api,Python,Methods,Iterator,Maya Api,在Maya中尝试一些基本编程时,我遇到了“MitMeshPolygon”方法。被描述为: “此类是多边形曲面(网格)的迭代器。” () 这似乎是我所需要的,所以我更多地研究了迭代器,从我所知道的,迭代器本身应该是可迭代的,并且有一个iter方法。然而,当试图迭代它时,python告诉我它是不可测试的 iterable = OpenMaya.MItMeshPolygon(dagPaths[0]) while not iterable.isDo

在Maya中尝试一些基本编程时,我遇到了“MitMeshPolygon”方法。被描述为: “此类是多边形曲面(网格)的迭代器。”

()

这似乎是我所需要的,所以我更多地研究了迭代器,从我所知道的,迭代器本身应该是可迭代的,并且有一个iter方法。然而,当试图迭代它时,python告诉我它是不可测试的

        iterable = OpenMaya.MItMeshPolygon(dagPaths[0])            
        while not iterable.isDone():
            print(iterable)
            print(dir(iterable))

[“class”、“delattr”、“dict”、“dir”、“doc”、“eq”、“格式”、“ge”、“getattribute”、“gt”、“哈希”、“init”、初始化子类、>le,“lt”,“module”,“ne”,“next”,“reduce”,“repr”,“setattr”,“sizeof,“Hook”,子类roy,“weakref,”中心“,”类名“,”计数“,”当前项“,”几何变化“,”getArea“,”getAxisAtUV“,”getColor“,”getColorIndex“,”getColorIndex“,”getColorIndex“,”getConnectedFaces“,”getConnectedVertices“,”getNormal“,”getNormals“,”getPointAtUV“,”getPoints“,”getTriangle“,”getTriangles、getUV、getUVArea、getUVAtPoint、getUVIndex、getUVSetNames、getUVs、getVertices、hasColor、hasUVs、HasValidTrianguation、index、isConnectedToEdge、isConnectedToEdge、isConnectedToFace、isConnectedToVertex、isConvex、isDone、Isolar、isStarlike、isUVReversed、next、normalIndex、NumColor、nuMConnectedges、“numonnectedfaces”、“numTriangles”、“onBoundary”、“point”、“polygon”、“polygonVertexCount”、“reset”、“setIndex”、“setPoints”、“setUV”、“setUVs”、“切线索引”、“this”、“thisown”、“updateSurface”、“vertexIndex”、“zeroArea”、“zeroUVArea”]


我想遍历所有多边形和“getArea”,但是现在我不知道怎么做,我读到的所有东西都告诉我迭代器应该是iterable的,但是程序告诉我不是。我在这里不明白什么?我如何使用这些方法来获取关于DagPath所指示对象的特定信息?

你的
iterable
有一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法您可以执行以下操作:

iterator = OpenMaya.MItMeshPolygon(dagPaths[0])            
try:
    while True:
        item = next(iterator)
        ...
except StopIteration:
    pass
请注意,我已将变量重命名为
迭代器
,因为这似乎是一个更正确的术语。一个iterable确实应该有一个
\uuuuuuuuuuuuuuuuu
方法,调用
iter(iterable)
将其转换为执行实际迭代的迭代器,并有一个
\uuuuuuuuuuuuuuuuuu
方法


事实上,
iterator
实际上可能是一个生成器,在运行中生成值(使用
next()
),您将无法访问随机定位的值(例如,使用索引),只能一个接一个地访问。然后您只需要一个
\uu next()__
方法。但是没有看到
MitMeshPolygon
的实际代码,这是一个猜测。

对于iterable:中的项是否
不起作用?请注意,有一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuu方法,因此您应该能够调用
next(iterable)
中,如果为True:
循环,一旦完成,它将引发
停止迭代
。取消设置。此对象不是Python中标准意义上的迭代器。您必须以某种特定于Maya的方式与它交互。查看方法列表,
计数
下一步
,以及
当前项
看起来它们可能是一条出路,但我对Maya了解不够,无法对如何使用它充满信心。@user2357112supportsMonica为什么
\uuuuuuuuuuuu next\uuuuuu
列在
dir()的输出中
?@00:Odd…在线文档中没有这一点,而且它缺少了所有迭代器都应该具备的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。