我试图生成一个dict,其中包含当前调用的非None
参数的名称和值。这很像是一个内置的东西,但是在Python文档中找不到任何可以做到这一点的东西
例如,当
def foo(limit=None, offset=None, lower_bound=None, upper_bound=None):
# code to generate dict of non-`None` named arguments (see below)
... # other things happen later
使用参数foo(limit=5, lower_bound=100)
调用,我需要以下命令:{limit=5, lower_bound=100}
有什么东西可以方便地为我做这件事吗
到目前为止,我已经研究了以下问题,所有这些问题似乎都有缺陷:
def foo(limit=None, offset=None, lower_bound=None, upper_bound=None):
keys = ('limit', 'offset', 'lower_bound', 'upper_bound')
values = (limit, offset, lower_bound, upper_bound)
magic_dict = {k: v for k, v in zip(keys, values) if v is not None}
locals()
-link-需要删除所有不应该进入字典的内容(即值为None
的键)。如果将变量定义添加到魔法字典代码的上方,则这似乎也有可能出错,这也需要删除李>def foo(limit=None, offset=None, lower_bound=None, upper_bound=None):
magic_dict = {k: v for k, v in locals().items() if v is not None}
inspect
的-link-signature
和bind
,这仍然需要一个参数列表def foo(limit=None, offset=None, lower_bound=None, upper_bound=None):
sig = signature(foo)
sig_args = sig.bind(limit, offset, lower_bound, upper_bound).arguments
magic_dict = {k: v for k, v in sig_args.items() if v is not None}
其他想法包括创建一个类来提供getattr
感觉好像我错过了一些显而易见的东西-请给予反馈
有人建议
What is an elegant way to select all non-None elements from parameters and place them in a python dictionary?,其回答主要是“移动到**kwargs
”。我最初的反应是,我更愿意保留一个具体的论点列表——这是我的错误逻辑吗?Python的典型最佳实践是什么
您可以尝试使用装饰器:
现在您可以拨打:
也可以使用局部变量方法,但要在函数顶部复制局部变量。最后,可以使用原始局部变量的键并仅选择return语句中的键:
请注意,必须复制局部变量,否则此方法将无效
如果您还想添加
kwargs
:然后:
相关问题 更多 >
编程相关推荐