下面的最小示例演示了从头开始编写此代码时您拥有的选项。在这里,您还可以在定义内部函数时定义默认参数,但在调用包装器时不指定它。请注意,在函数内部,如果已将默认变量a定义为默认参数,则会从kwargs中删除它。仅在run_test_working3中(仅使用包装器中的setdefault设置默认值),默认变量a不会从kwargs中删除。如果您想将kwargs传递给测试函数中的内部函数,则这可能很重要。
kwargs = {"a": 1,
"b": 2,
"c": 3}
kwargs2 = {"b": 2,
"c": 3}
def test(required_arg, a="default", **kwargs):
print(required_arg)
print(a)
print(kwargs)
def test2(required_arg, **kwargs):
print(required_arg)
print(kwargs)
def run_test_working1(required_arg, **kwargs):
test(required_arg, **kwargs)
def run_test_working2(required_arg, **kwargs):
kwargs.setdefault("a", "default2")
test(required_arg, **kwargs)
def run_test_working3(required_arg, **kwargs):
kwargs.setdefault("a", "default2")
test2(required_arg, **kwargs)
def run_test_not_working(required_arg, **kwargs):
test(required_arg, a="default", **kwargs)
print("Demo run_test_working1\n")
run_test_working1("required_arg",**kwargs)
print("\n")
run_test_working1("required_arg",**kwargs2)
print("\n")
print("Demo run_test_working2\n")
run_test_working2("required_arg",**kwargs)
print("\n")
run_test_working2("required_arg",**kwargs2)
print("\n")
print("Demo run_test_working3\n")
run_test_working3("required_arg",**kwargs)
print("\n")
run_test_working3("required_arg",**kwargs2)
print("\n")
print("Demo run_test_not_working\n")
run_test_not_working("required_arg",**kwargs)
print("\n")
test("required_arg")