【发布时间】:2010-02-04 13:41:00
【问题描述】:
我要转换以下代码:
...
urls = [many urls]
links = []
funcs = []
for url in urls:
func = getFunc(url, links)
funcs.append(func)
...
def getFunc(url, links):
def func():
page = open(url)
link = searchForLink(page)
links.append(link)
return func
进入更方便的代码:
urls = [many urls]
links = []
funcs = []
for url in urls:
<STATEMENT>(funcs):
page = open(url)
link = searchForLink(page)
links.append(link)
我希望通过 with 声明来做到这一点。正如我在下面评论的那样,我希望实现:
def __enter__():
def func():
..code in the for loop..
def __exit__():
funcs.append(func)
这当然行不通。
列表推导不适用于searchForLink 操作不仅是一种功能,而且是多种功能的情况。它会变成一个非常不可读的代码。例如,即使这对列表推导也会有问题:
for url in urls:
page = open(url)
link1 = searchForLink(page)
link2 = searchForLink(page)
actionOnLink(link1)
actionOnLink(link2)
.... many more of these actions...
links.append(link1)
【问题讨论】:
-
首先:为什么要传递函数?是的,有 个用例,但它们并不常见。其次,你为什么不使用函数?功能没有错。 :)
-
如果你迷路了(就像我一样),这个问题的答案是:使用列表理解。
标签: python with-statement