【发布时间】:2013-09-14 03:58:02
【问题描述】:
我正在尝试以最 Pythonic 的方式编写此代码,但我刚刚学习 lambda(以及它们可以结合的内容)并且遇到了一些困难。
使用mechanize 模块,我正在为一个选择控件抓取一个网站,并尝试将每个选项值提交到表单并读取结果内容(也许我试图为一个小小的 'ol 语句做太多事情)。这是我所拥有的:
f = "ctl00$holdSection$selSubAgentFilter" #the select box field name
self.br.select_form(nr=0) #make the form selection in the browser instance
#here's where the magic is done
map( (lambda item,f=f: print(self.br.form.find_control( f ).items[ item[0] ].selected.submit().read() ) ), enumerate( self.br.find_control( f ).items ) )
因此,为了将其分开,我正在尝试执行以下操作:
- 遍历选择字段中的每个选项,方法是使用 enumerate 并从控件中获取项目并将枚举列表提交给
map函数以基本上“遍历”每个列表项 - 对
map执行的函数使用 lambda 函数 - 将项目列表(枚举以获取索引)提交给 lambda 函数
- 使用传入项的枚举索引,选择表单控件中的项并选择它
- 提交表格
- 读取新浏览器窗口的内容并将
print()返回到标准输出
当然,在这种情况下,链式方法的 selected 属性计算为布尔值并发出以下错误:
AttributeError: 'bool' object has no attribute 'submit'
但是你知道我想要完成什么,我只是不确定如何,并以最小的占用空间完成它——我可以使用几行和 for 循环让它工作,我只是如果可能的话,尽量远离它。我正在尝试以最 Pythonic 的方式而不是最简单的方式扩展和克服问题。
有什么想法吗?
【问题讨论】:
标签: python forms map lambda mechanize