我有這樣的功能,它的參數列表:如何傳遞函數列表及其所有參數在Python中的另一個函數中執行?
(func1, *arg1), (func2, *arg2),...
我想將它們傳遞到另一個函數這樣執行它們:
for func, arg* in (list of funcs, args):
func(arg*)
如何做到這一點在Python?我已經嘗試了幾次,但它不喜歡拆包和* arg。
我有這樣的功能,它的參數列表:如何傳遞函數列表及其所有參數在Python中的另一個函數中執行?
(func1, *arg1), (func2, *arg2),...
我想將它們傳遞到另一個函數這樣執行它們:
for func, arg* in (list of funcs, args):
func(arg*)
如何做到這一點在Python?我已經嘗試了幾次,但它不喜歡拆包和* arg。
您可以使用*-operator to unpack the arguments out of the tuple。
例如,假設調用列表中的項目格式爲(function,arg1,arg2,...)
。換句話說,item[0]
是你的函數,而item[1:]
是應該給函數的參數。
def f1(x1):
print("f1 {0}".format(x1))
def f2(x1,x2):
print("f2 {0} {1}".format(x1,x2))
for data in ((f1,5),(f2,3,4)):
data[0](*data[1:])
# output:
# f1 5
# f2 3 4
你可以這樣做,只需使用元組列表,其中首先是函數名稱,其餘是參數。
def a(*args,**kwargs):
print 1
list_f = [(a,1,2,3)]
for f in list_f:
f[0](f[1:])
您的解決方案使用一個參數調用函數 - 一個元組。 – napuzba
假設你的功能和參數可在元組分開,
def squarer(*args):
return map(lambda x: x*2, args)
def subtracter(*args):
return map(lambda x: x-1, args)
funcAndArgs = [(squarer, [1,2,3,4]), (subtracter, [1,2,3,4])]
for func, args in funcAndArgs:
print func(*args)
輸出:
[2, 4, 6, 8]
[0, 1, 2, 3]
除了'ARG *'是在Python無效的語法,什麼確切的問題是你有? 「它不喜歡」有點模糊。也請顯示原始列表的確切格式。 –