我想拥有dict
个函数,但有些函数比其他函数需要更多参数。
"1":func1, # This takes 0 arguments
"2":func2 # This takes 1 argument `
我不知道如何通过dict
调用该函数。我应该有一个if
的陈述,还是我缺少的东西?
答案 0 :(得分:2)
假设这样设置:
def foo():
print('foo')
def bar(a):
print('bar %s' % a)
def spam(a, b):
print('spam %s %s' % (a, b))
functions = dict(foo=foo, bar=bar, spam=spam)
以下是您可以做的事情:
import inspect
for func in functions.values():
num_args = len(inspect.signature(func).parameters)
args = [1, 2, 3]
func(*args[:num_args])
答案 1 :(得分:0)
您可以使所有函数都包含参数列表。
[arg1, arg2] or [] # empty, etc...
您还可以在dict值中存储参数数量。
"1": (func1, 0), etc...
然后你可以调用像
这样的函数dictionary["1"]([arg1, arg2]) # Or with other implementation style you used.
答案 2 :(得分:0)
将函数存储在字典中,并使用正确数量的参数调用函数。没有什么特别需要做的。
def func1():
print("Function 1 - no args")
def func2(a):
print("Function 2 got arg", a)
def func3(r, g="green", b="blue"):
print("Function 3 got %r, %r and %r" % (r,g,b))
d = { "1": func1,
"2": func2,
"3": func3 }
d["1"]()
d["2"]("Hello")
您甚至可以inspect
字典中的函数来获取方法的签名(位置参数和关键字参数以及默认值)。
import inspect
f = d["3"]
sig = inspect.signature(f)
ba = sig.bind("red", g="gray")
ba.apply_defaults()
f(*ba.args, **ba.kwargs)
输出:
功能1 - 没有args
功能2得到arg Hello
功能3得到了红色'灰色'和'蓝色'