Я хочу преобразовать следующий код:
...
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)