是否有更简单的表示法将特定的关键字参数转发给函数?

时间:2014-07-31 05:58:20

标签: python

有时候我会编写一个函数来调用具有相同long关键字参数的另一个函数,以及一堆不相关的参数。

是否有一个简短的表示法转发关键字参数而不重复两次,假设它必须通过关键字调用(因为bar还有其他关键字参数未被使用)?

考虑以下功能。

def foo(a1, a2, a3, arg_with_very_long_name):
    # do other work
    bar(b1, b2, b3, b4, arg_with_very_long_name=arg_with_very_long_name)

上面arg_with_very_long_name=arg_with_very_long_name的调用中,bar是否有较短的格式?

2 个答案:

答案 0 :(得分:2)

没有比你已经完成更好的完美方式了。另一种选择是使用**kwarg解压缩:

def foo(a, b, c, **kwargs):
    # do stuff
    bar(aa, bb, cc, **kwargs)

这里的缺点(和好处)是你不会立即知道哪些关键字被转发到bar。它使得foo接受bar所做的任何默认参数 - 但是你不能通过查看foo来反省这些参数。

答案 1 :(得分:0)

如果关键字参数直接跟随位置参数,则无需使用kwarg=kwarg语法:

def f(a, b, c, some_ver_long_kwarg_name=None):
    print(some_very_long_kwarg_name)

f(1, 2, 3, 4) # Prints 4