分发关键字参数的最佳方式?

fea*_*ool 5 python keyword-argument

在被调用函数之间分配关键字参数的批准编程模式是什么?

考虑这个人为(和错误)的例子:

def create_box(**kwargs):
    box = Box()
    set_size(box, **kwargs)
    set_appearance(box, **kwargs)

def set_size(box, width=1, height=1, length=1):
    ...

def set_appearance(box, material='cardboard', color='brown'):
    ...
Run Code Online (Sandbox Code Playgroud)

显然,set_size()方法会反对接收materialcolor关键字参数,正如set_appearance()会反对接收widthheightlength参数。

有一个有效的参数create_box()应该使所有关键字和默认值都显式,但明显的实现是相当笨拙的:

def create_box(width=1, height=1, length=1, material='cardboard', color='brown'):
    box = Box()
    set_size(box, width=width, height=height, length=length)
    set_appearance(box, material=material, color=color)
Run Code Online (Sandbox Code Playgroud)

有没有更 Pythonic 的方法来解决这个问题?

Rob*_*eno 5

您可以将**kwargs作为最后一个参数添加到否则会变得恼火的函数中。

def create_box(**kwargs):
    box = Box()
    set_size(box, **kwargs)
    set_appearance(box, **kwargs)

def set_size(box, width=1, height=1, length=1, **kwargs):
    ...

def set_appearance(box, material='cardboard', color='brown', **kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)