想象一下:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota, kappa):
pass
这行超过了79个字符,那么有什么Pythonic的方法可以多行书写吗?
您可以在括号(或方括号)内包含换行符,例如:
def method(self, alpha, beta, gamma, delta, epsilon, zeta,
eta, theta, iota, kappa):
pass
(当然,包含的空格量取决于您)
但在这种情况下,您还可以考虑
def method(self, *args):
pass
并且/或者
def method(self, **kwargs):
pass
根据你如何使用参数(以及你想要函数被调用的方式)而定。
*args
和**kwargs
再加一分。 - gomad我认为“Pythonic”的答案不仅仅涉及语法问题。向一个方法传递如此多的参数表明你的对象模型可能存在问题。
首先,你真的需要向这个方法传递那么多参数吗?也许这表明这项工作可以在其他地方更好地完成(由已经访问变量的对象完成)?
如果这确实是最好的地方,则可以通过self
将其中一些参数作为该对象本身的实例变量提供吗?
如果不行,是否可以重新定义父对象的职责以包括它们?
如果不行,是否可以将任何单个参数封装到一个组合对象中,以规范它们之间的关系?如果任何参数有共同之处,那么应该是可行的。
我将后续行缩进2个级别:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta,
theta, iota, kappa):
pass
collection.abc
中的概念来格式化长参数和返回类型规范的问题,通常需要很多空间。 - Wolfdef method(
self, alpha, beta, gamma, delta, epsilon,
zeta, eta, theta, iota, kappa
):
pass
当输入数字79时,我会在第一次出现的开括号处进行拆分,就像这样:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota,
kappa):
当名称过长无法放置在开括号后面时,我会这样做:
x.long_function_is_long(
long_argument_is_loooooooooooooooooooooooooooooooooooooooong,
longer_argument_is_looooooooooooooooooooooooooooooooooooooooonger
)
如果你有一个函数需要传递很多变量作为参数,你最后需要担心的事情就是缩进。
为了可读性,当我有长名称时,我会这样做:
file = load_sftp_file( SERVER_SFTP_HOST,
SERVER_SFTP_USER,
SERVER_SFTP_PASSWORD,
SERVER_SFTP_PRIVATE_KEY,
SERVER_SFTP_PATH,
FTP_DIR,
specific_filename=self.get_filename())
我通常这样做,不知道是否最好,但它能够工作。由于我必须分割行,所以我让它们长度相等(如果可以的话):
def method(self, alpha, beta, gamma, delta, epsilon, \
zeta, eta, theta, iota, kappa):
pass
*args
。