我试图理解为什么我可以沿着字符串迭代.我在文档中看到的是:
需要为容器对象定义一个方法以提供迭代支持:
容器.__ iter __()
返回一个迭代器对象.该对象需要支持下面描述的迭代器协议.如果容器支持不同类型的迭代,则可以提供其他方法来专门请求这些迭代类型的迭代器.(支持多种迭代形式的对象的示例是支持广度优先和深度优先遍历的树结构.)此方法对应于Python/C API中Python对象的类型结构的tp_iter槽.
迭代器对象本身需要支持以下两种方法,它们共同构成迭代器协议:
迭代器.__ iter __()
返回迭代器对象本身.这是允许容器和迭代器与for和in语句一起使用所必需的.此方法对应于Python/C API中Python对象的类型结构的tp_iter槽.
迭代器.下一个()
从容器中返回下一个项目.如果没有其他项,请提高StopIteration异常.此方法对应于Python/C API中Python对象的类型结构的tp_iternext槽.
但...
>>> dir('aa')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__',
'__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']
Run Code Online (Sandbox Code Playgroud)
我在这里看不到__ iter __()或next().那它为什么有效呢?