【发布时间】:2022-08-04 03:29:50
【问题描述】:
我有多种方法都可以构建在subprocess 中运行的 bash 命令。它们都是不同的,但具有相同的基本逻辑。如果True,则所有布尔关键字必须转换为--myBool,如果不为空或None等,则所有字符串必须转换为--myStr=content_of_myStr。具有特定类型(列表等)的其他参数在每个中单独处理方法。
我想为用户保留一些类型提示(基本和常用关键字),同时允许用户将使用范围扩展到其他不常见的关键字(通过**kwargs),最重要的是,我想保留一些关键字的默认值。如果将所有命名参数放在**kwargs 中,我想我无法满足这些需求。
如何自动获取传递给方法的所有对 key: value 的字典(在签名中明确命名加上 **kwargs 中的那些)?当然,我的请求不能支持签名中的*args。
例如:
def my_func(a, b, c=3, **kwargs):
print(_some_magic_function_)
my_func(a=1, b=2, d=4)
# {\'a\': 1, \'b\': 2, \'c\': 3, \'d\': 4}
一种解决方案是这样做:
def my_func(**kwargs):
print(kwargs)
my_func(a=1, b=2, d=4)
# {\'a\': 1, \'b\': 2, \'d\': 4}
但这样,我无法处理默认值,也没有给用户的类型提示。
-
是什么目的这个的?例如,您可以简单地
print(dict(a=a, b=b, c=c, **kwargs)),但不知道为什么很难说这是否满足您的需求。 -
^ 乔恩所说的。当心XY problem
-
@jonrsharpe 我希望该解决方案适用于所有方法,而无需硬编码 \'a\'、\'b\' 等。
-
@jonrsharpe - 这不是如何进行
**kwargs关键字扩展但仍有类型提示的问题吗?当然,您可以构建自己的 dict,但有没有办法不必这样做? -
@tdelaney 我不知道;这就是我问OP的原因。
标签: python