我知道人们常常使用**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
答案 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