gpt4 book ai didi

python - 如何迭代命名关键字参数?

转载 作者:行者123 更新时间:2023-12-04 08:59:43 26 4
gpt4 key购买 nike

如何迭代 Python 函数中的关键字参数?
例如,假设我有以下方法:

class Car():
def start_engine(self, key, *, driver=None, passenger=None, gas=None):
for k,v in <ITERATE_OVER_KEYWORD_ARGUMENT>:
if v is not None:
print(f"KEY: {k} VALUE:{v}")

c = Car()
c.start_engine(key, driver="Bob", passenger="Alice")
应该打印:
driver: Bob   
passenger: Alice
我不想使用 **kwargs因为我想命名我的论点。
我不能只是打电话 locals()因为我还有其他论据。
我想我可以做一个辅助函数来接收 **kwargs然后构建一个 dict,然后我会用我所有的关键字参数调用该函数,但这似乎很糟糕。

def to_dict(**kwargs):
d = {k:v for k,v in kwargs.items() if v is not None}
return d

那行得通,但似乎是完成我想要做的事情的一种奇怪的方式。
是否有一种可接受的方法来迭代关键字参数,或者出于某种原因是糟糕的 Python?

最佳答案

在您的情况下,它们都是可选的仅关键字参数(即具有默认值的参数),因此您可以使用:

for k in self.start_engine.__kwdefaults__:
v = locals()[k]
这种简单的方法将无法捕获没有默认值的仅关键字参数。 Car您的问题中显示的不使用任何,但以防万一需要支持那些 "required keyword" arguments ,您可能需要检查签名:
>>> import inspect
>>> class Car:
... def start_engine(self, key, *, driver=None, passenger=None, dog, gas=None):
... sig = inspect.signature(self.start_engine)
... for k, v in sig.parameters.items():
... if v.kind is inspect.Parameter.KEYWORD_ONLY:
... print(k, locals()[k])
...
>>> Car().start_engine("key", gas="unleaded", dog="ridgeback")
driver None
passenger None
dog ridgeback
gas unleaded

关于python - 如何迭代命名关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63624400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com