Всем привет!
Вопрос собственно, наверное, элементарный, но времени на разбираться нету.
Прошу совета в задаче - есть список аргументов, который нужно будет дополнять, есть функция - необходимо поочередно брать из списка новый аргумент и выполнять с ним функцию, столько раз, сколько есть аргументов в списке. Нужен оптимально короткий и понятный код.
Прошу помощи.
Хм… Не совсем понял.
def func1():
List myList
for (i in list):
func2 (i)
def func2(i):
doSmthWithI
my_args = [1, 2]
def execute_with_args(arg_list):
def wrapper(target_func):
def inner():
for arg in arg_list:
target_func(arg)
return inner
return wrapper
@execute_with_args(my_args)
def my_func(arg):
print('>>>>', arg)
my_func()
print('---------')
my_args.extend([3, 4])
my_func()
>>>> 1
>>>> 2
---------
>>>> 1
>>>> 2
>>>> 3
>>>> 4
Спасибо
Большое спасибо, вы снова мне помогли
А позвольте спросить, что делает вот этот блок:
def execute_with_args(arg_list):
def wrapper(target_func):
def inner():
for arg in arg_list:
target_func(arg)
return inner
return wrapper
Не хватает ума проследить что именно он выполняет, если не сложно.
Я просто додумался как написать то что меня устраивает, примитивным и понятным мне языком, но ваша часть выглядит лучше, хотя я до конца ее и не понимаю.
Мой пример:
urls = [‘link1’, ‘link2’, ‘link3’]
for check in urls:
def test1(check):
x = 2 + 7
y = str(x)+check
test1(check)
Это декоратор, функция, которая оборачивает другую функцию
Подробнее: Decorators — Python 3 Patterns, Recipes and Idioms
Ваш вариант тоже “почти ок”, если подобную операцию необходимо выполнять только один раз, правильнее конечно же определять функцию вне цикла:
urls = [‘link1’, ‘link2’, ‘link3’]
def test1(check):
x = 2 + 7
y = str(x)+check
for check in urls:
test1(check)
Крайне благодарен, спасибо за ваш труд!