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()方法会反对接收material或color关键字参数,正如set_appearance()会反对接收width,height或length参数。
有一个有效的参数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 的方法来解决这个问题?
您可以将**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)