异步的语义等价于

Jac*_*din 5 python python-asyncio

从相对于async forPython 3.5中的语法的文档中,我收集到它是为了迭代一个等待的迭代器而引入的.

尽管如此,我仍然没有按照描述的语义等价物获得:

iter = (ITER)
iter = type(iter).__aiter__(iter)
running = True
while running:
    try:
        TARGET = await type(iter).__anext__(iter)
    except StopAsyncIteration:
        running = False
    else:
       BLOCK
else:
    BLOCK2 
Run Code Online (Sandbox Code Playgroud)

线路iter = type(iter).__aiter__(iter)在做什么?为什么有必要?

Mis*_*agi 3

例如,Python 中的魔术方法__add__总是在类中查找。例如,实际上会调用resolve to 。这意味着它永远不会使用在 上定义的if 。 len(foo)type(foo).__len__(foo)foo.__len____len__foo

由于__aiter__ 是一个神奇的方法,因此它总是被查找为type(foo).__aiter__(foo)


查找示例:

class Thingy(object):
  def __len__(self):
    return 10

lengthy_thingy = Thingy()
lengthy_thingy.__len__ = lambda self: 20

print(len(lengthy_thingy))  # gives `10`
print(lengthy_thingy.__len__(lengthy_thingy))  # gives `20` instead
print(type(lengthy_thingy).__len__(lengthy_thingy))  # gives `10` as for using `len`
Run Code Online (Sandbox Code Playgroud)