2016-09-16 96 views
0

我知道这是一种常见的情况,人们可以使用**kwargs给任意数量的kwargs函数,然后以字典的形式访问它们;不过,我想明确指定我的函数kwargs,但仍然可以作为字典访问它们。如何在Python函数中获取命名参数的字典

这是因为我希望我的函数只接收特定的kwargs,但我需要对它们进行相同的操作,我可以将它们放入for循环中。

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    kwargs = {} # After somehow getting all my kwargs into a dictionary 

    for k in kwargs: 
     # Do my operation 

我做希望我的函数接收的kwargs任意数字,但我要访问我的字典kwargs

回答

0

简单地创建一个正常的字典,检索每个参数的值。

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    kwargs = {'kwarg1':kwarg1, 'kwarg2':kwarg2, 'kwarg3':kwarg3} 

    for k in kwargs: 
     # Do my operation 
+0

我不敢相信我没有想到这一点。我虽然有更好的方法。谢谢。 – 99lives

1

假设你有没有位置参数,你可以通过locals访问您kwargs,如果你把它放在你的函数的顶部:

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    # Don't add any more variables before the next line! 
    kwargs = dict(locals()) 

    for k in kwargs: 
     # Do my operation 

这是哈克(最好),它是可能更好地拼出来:

kwargs = {'kwarg1': kwarg1, ...} 
1

这是Python3.3 +代码,它会自动创建关键字参数名称列表。只是为了完善。我更喜欢任何简单的解决方案。

import inspect 

def my_func(*, kwarg1=None, kwarg2=None, kwarg3=None): 
    local_vars = locals() 
    kwargs = {k: local_vars[k] for k in KWARGS_my_func} 
    print(kwargs) 

KWARGS_my_func = [p.name for p in inspect.signature(my_func).parameters.values() 
        if p.kind == inspect.Parameter.KEYWORD_ONLY] 

my_func(kwarg2=2) 
相关问题