gpt4 book ai didi

python - 如何干净地传递关键字参数?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:45 25 4
gpt4 key购买 nike

在编写调用其他子函数的函数时,我经常希望允许调用者为这些子函数传递任意关键字参数。然而,我目前的实现方式很困惑,我正在寻找一种更清晰、简洁、可维护的方式。

下面是我目前如何实现此功能的示例:

def foo(a, print_line="Hello World!"):
print a, print_line

def bar(a, number=2, multiple=4):
print a, number * multiple

def baz(a, **kwargs):
if "print_line" in kwargs:
foo(a, print_line=kwargs["print_line"])
else:
foo(a)

bar_kwargs = dict()
if "number" in kwargs:
bar_kwargs["number"] = kwargs["number"]
if "multiple" in kwargs:
bar_kwargs["multiple"] = kwargs["multiple"]
bar(a, **bar_kwargs)

这种方法很容易出错,我需要实现我想要表达的每个 kwarg。有时我可以逃脱 foo(a, print_line=kwargs.get("print_line", False)但我想保留 kwarg 的默认参数。

最佳答案

简单。只需将 kwargs 本身传递到子函数中,然后将 kwargs 变量添加到子函数

def foo(a, print_line="Hello World!", **kwargs):
print a, print_line

def bar(a, number=2, multiple=4, **kwargs):
print a, number * multiple

def baz(a, **kwargs):
foo(a, **kwargs)
bar(a, **kwargs)

这是有效的,因为现在子函数可以接收任意数量的关键字参数,同时具体定义它们需要具有的参数。因此,看起来像 {'print_line':'test_line', 'number':1,'multiple':2} 的 kwarg 字典对于这两个函数都可以完美运行。

根据评论的要求:

class SomeoneElsesClass:
def someone_elses_function(self, a, foo="bar"):
print(foo)

class MyClass(SomeoneElsesClass):
def someone_elses_function(self, a, foo="bar2", **kwargs):
super(MyClass, self).someone_elses_function(a, foo)

关于python - 如何干净地传递关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721726/

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