想象一下:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota, kappa):
pass
这条线超越了79个字符,那么多线性的pythonic方式是什么?
答案 0 :(得分:20)
您可以在括号(或括号)中加入换行符,例如
def method(self, alpha, beta, gamma, delta, epsilon, zeta,
eta, theta, iota, kappa):
pass
(当然,要包括的空白量取决于你)
但在这种情况下,你也可以考虑
def method(self, *args):
pass
和/或
def method(self, **kwargs):
pass
取决于您如何使用参数(以及您希望如何调用函数)。
答案 1 :(得分:13)
我认为'Pythonic'回答这个问题的方法是比语法更深入。传递一个方法的许多参数表明您的对象模型可能存在问题。
首先,你真的需要将这么多参数传递给这个方法吗?也许这表明在其他地方(通过已经可以访问变量的对象)可以更好地完成工作?
如果这确实是该方法的最佳位置,那么这些参数中的一些可以作为该对象本身的实例变量提供(通过self
)吗?
如果没有,您可以重新定义父对象的职责以包含它们吗?
如果没有,您是否可以将任何单个参数封装在一个复合对象中,以正式化它们之间的关系?如果任何参数有任何共同点,那么这应该是可能的。
答案 2 :(得分:6)
我缩进后续第2行:
def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta,
theta, iota, kappa):
pass
答案 3 :(得分:1)
如果你有一个函数需要这么多变量作为参数,你最不用担心的是缩进
答案 4 :(得分:1)
一旦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
)
答案 5 :(得分:1)
另一种选择是在字典中传递参数。
答案 6 :(得分:0)
出于可读性考虑,我这样做是:
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())
答案 7 :(得分:-2)
我通常这样做,我不知道它是否是最好的,但它确实有效。因为我必须分割线,所以我们将它们放得更长(如果可以的话):
def method(self, alpha, beta, gamma, delta, epsilon, \
zeta, eta, theta, iota, kappa):
pass
此外,如果有大量相同的参数,请使用*args