如何在Python函数

时间:2016-09-16 05:22:56

标签: python dictionary parameters

我知道人们常常使用**kwargs赋予函数任意数量的kwargs,然后将它们作为字典访问;但是,我想明确指定我的函数kwargs,但仍然可以将它们作为字典访问。

这是因为我希望我的函数只接收特定的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

3 个答案:

答案 0 :(得分:2)

假设您没有位置参数,如果您将它放在函数的顶部,则可以通过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

这是hacky(充其量)并且最好拼出来:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

只需正常创建字典,检索每个参数的值。

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

    for k in kwargs:
        # Do my operation