2010-06-28 44 views
5

想象一下這樣的函數/方法:Python化的方式與不少爭論

def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota, kappa): 
    pass 

線立交橋79個字符,那麼,什麼是對多它Python的方式?

+3

考慮分組的參數爲凝聚力的數據保持類 – manifest 2010-06-28 21:17:04

+0

對於所有的,我知道* ARGS,但我不能組這樣的觀點,因爲我使用Python的一個子集,它不允許此語法。 – mkotechno 2010-06-28 22:32:55

回答

4

我縮進隨後的行2級:

def method(self, alpha, beta, gamma, delta, epsilon, zeta, eta, 
     theta, iota, kappa): 
    pass 
+1

+1並且接受,因爲我只是回答了這個問題,假設我不是白癡,並且解決方案與空格和製表符縮進兼容。 – mkotechno 2010-06-28 22:38:15

19

可以包括括號內換行符(或支架),例如

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

+1對'* args'和'** kwargs' – 2010-06-28 20:51:38

+0

另一個用於'* args'和** ** kwargs的+1 – gomad 2010-06-28 21:06:52

+0

+1多行括號。我花了一段時間才發現你可以做到這一點,許多初學者都不知道它的便利。告別醜陋的\! – manifest 2010-06-28 21:14:22

1

如果你有一個函數,那麼多的變量作爲自變量,你不用擔心的最後一件事是壓痕

+0

不是真的答案,是嗎? – 2010-06-28 21:05:21

+0

我想投票這很糟糕,但是啊...應該是一個評論。 – Shog9 2010-06-28 21:06:51

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 
) 
-2

我經常這樣做,我不知道這是否是最好的,但它瓦特獸人。因爲我要拆我讓他們同樣長的線(如果我可以):也

def method(self, alpha, beta, gamma, delta, epsilon, \ 
       zeta, eta, theta, iota, kappa): 
    pass 

,具有參數,量我會建議同樣的大衛,使用*args

+1

\角色是不必要的。在Python中,使用圓括號進行分組可以使代碼跨越多行 - 這在PEP 8 http://www.python.org/dev/peps/pep-0008/中已經指出。 – 2010-06-28 21:33:30

+0

不知道。謝謝 :) – 2010-06-28 21:35:49

9

我認爲' Pythonic回答這個問題的方式是比語法更深入。將一個方法的許多參數傳遞給對象模型可能會帶來問題。

  1. 首先,您是否真的需要將這麼多參數傳遞給此方法?也許這表明這項工作可以在其他地方更好地完成(通過一個已經可以訪問變量的對象)?

  2. 如果這真的是該方法的最佳位置,那麼這些對象本身的實例變量(通過self)可以提供一些參數嗎?

  3. 如果不是,您是否可以重新定義父對象的責任以包含它們?

  4. 如果不是,你可以將任何單獨的參數封裝在一個組合對象中,以正式化它們之間的關係嗎?如果任何論點有任何共同點,那麼這應該是可能的。