(所以我试图学习python,我认为阅读代码会比我更好,我决定阅读电子邮件模块...)了解python 2.7 email.feedparser Feedparser __init__函数
为email.feedparser
模块中的Feedparser类的init
函数被定义为:
def __init__(self, _factory=message.Message):
"""_factory is called with no arguments to create a new message obj"""
self._factory = _factory
self._input = BufferedSubFile()
self._msgstack = []
self._parse = self._parsegen().next
self._cur = None
self._last = None
self._headersonly = False
我在使用麻烦的行是:
self._parse = self._parsegen().next
我想这应该是指“属性self._parse
设置为方法的返回值的next
属性的值self._parsegen()
据我所知,self._parsgen()
当在__init__()
叫首先调用self._new_message()
这将将值设置/添加到self._cur
,self._last
和self._msgstack
。然后它会将一个空列表对象分配给本地变量headers
,然后开始迭代self._input
对象。我认为line
的第一个值将是一个NeedMoreData
对象。由于NeedMoreData
类只是扩展对象,因此它不应具有名为next
的属性或方法。那么next
只是指向迭代器(self._input
)?
有什么办法可以在解释器中看看这个,这样我就可以遍历脚本的每一行了?
您可以在任何代码中设置调试器断点(你自己的,第三方的模块或标准库的Python部分)像这样: 'import pdb; pdb.set_trace()' 这会在您碰到那行代码时立即将您引入内置的调试器pdb中,然后您可以使用'n'执行下一个(跳过),进入下一行的评估(例如函数调用),'w'显示调用堆栈,''显示围绕你所在行的代码上下文,当然也可以做任何你能在常规口译中做的事情。 –