给定一个以多个函数为参数的高阶函数,该函数如何将关键字参数传递给函数参数?
示例
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') # errorstate不是eat的关键字arg,那么短剧怎么能只传递与它正在调用的函数相关的关键字args呢?
发布于 2014-05-02 14:18:56
您可以根据函数的kwargs (在python 2中)筛选func_code.co_varnames字典:
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})发布于 2014-05-02 14:19:27
如果将**kwargs添加到所有定义中,则可以传递全部内容:
def eat(food='eggs', how_much=1, **kwargs):
print(food * how_much)
def parrot_is(state='dead', **kwargs):
print("This parrot is %s." % state)
def skit(*lines, **kwargs):
for line in lines:
line(**kwargs)**kwargs中任何不是显式关键字参数的内容都只会留在kwargs中,而被eat忽略。
示例:
>>> skit(eat, parrot_is, food='spam', how_much=50, state='an ex-parrot')
spamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspamspam
This parrot is an ex-parrot.发布于 2020-06-08 18:09:54
def sample(a,b,*,c=0): print(a,b,c)
* ->在参数之前是args,在参数后面是kwargs(关键字参数)
sample(1,2,c=10) sample(a=1,b=2,c=1) # this also work sample(1,2,c) # TypeError: sample() takes 2 positional arguments but 3 were given
https://stackoverflow.com/questions/23430248
复制相似问题