给定一个将多个函数作为参数的高阶函数,该函数如何将关键字参数传递给函数参数?
例子
def eat(food='eggs', how_much=1):
print(food * how_much)
def parrot_is(state='dead'):
print("This parrot is %s." % state)
def skit(*lines, **kwargs):
for line in lines:
line(**kwargs)
skit(eat, parrot_is) # eggs \n This parrot is dead.
skit(eat, parrot_is, food='spam', how_much=50, state='an ex-parrot') # error
state
不是 eat
的关键字参数,那么 skit 怎么能只传递与其调用的函数相关的关键字参数呢?
最佳答案
您可以根据函数的 func_code.co_varnames
(在 python 2 中)过滤 kwargs
字典:
def skit(*lines, **kwargs):
for line in lines:
line(**{key: value for key, value in kwargs.iteritems()
if key in line.func_code.co_varnames})
在 python 3 中,应该使用 __code__
而不是 func_code
。所以函数将是:
def skit(*lines, **kwargs):
for line in lines:
line(**{key: value for key, value in kwargs.iteritems()
if key in line.__code__.co_varnames})
关于python - 为不同的函数分离 **kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430248/