编写具有大量参数的Python函数/方法的优雅方式
想象一下:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota, kappa):
pass
这一行超过了79个字符,那么,用Python的方式怎么把它分成多行呢?
9 个回答
23
我觉得用“Pythonic”的方式来回答这个问题,应该深入思考,不仅仅看语法。传递这么多参数给一个方法,可能说明你的对象设计有问题。
首先,你真的需要给这个方法传这么多参数吗?也许这说明这些工作可以在别的地方更好地完成,比如由一个已经能访问这些变量的对象来处理?
如果这个方法确实是最合适的地方,那有没有可能把其中一些参数作为这个对象本身的实例变量(通过
self
)来提供呢?如果不行,那能不能重新定义父对象的职责,把这些参数包含进去?
如果还是不行,能不能把某些单独的参数封装成一个组合对象,这样可以明确它们之间的关系?如果这些参数之间有共同点,那这样做应该是可行的。
35
你可以在括号里加换行,比如这样:
def method(self, alpha, beta, gamma, delta, epsilon, zeta,
eta, theta, iota, kappa):
pass
(里面的空白量当然是你自己决定的)
不过在这种情况下,你也可以考虑
def method(self, *args):
pass
和/或
def method(self, **kwargs):
pass
这要看你怎么使用这些参数(以及你希望这个函数怎么被调用)。
9
我把后面的行缩进了两个级别:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta,
theta, iota, kappa):
pass