我想转换以下代码:
...
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)