2017-11-18 83 views
0

我想將一些java代碼轉換爲python等價物,這樣我可以在兩者之間進行接口。所以在Java中我有一些像這樣的代碼:您可以在指定默認參數時使用self嗎?

public int[] toArray(boolean order) { 
    return toArray(order, this.length()); 
} 
public int[] toArray(boolean order, int length) { 
    ... 
} 

和Python中的邏輯等價物可能是這樣的:

def to_array(self, order): 
    return self.to_array(order, self.length()) 
def to_array(self, order, length): 
    ... 

除了...蟒蛇不允許函數重載,相反,它允許因爲自己沒有真正「存在

def to_array(self, order, length = self.length()): 
    ... 

但是......這也不能在Python允許,有可能:默認參數,所以,再次,它似乎是合乎邏輯,你會想要做這樣的事情「直到w ithin函數的主體。

那麼在Python中做這件事的正確方法是什麼?或者它是不可能的?

編輯:我意識到,我使用的是應該返回一個值,所以現在他們返回int[]

回答

5

的Python的方式來做到這一點是使用None爲默認值,再試着在我的Java代碼void函數它:

def to_array(self, order, length=None): 
    if length is None: 
     length = self.length() 
+0

謝謝,這看起來像我在找什麼。看起來像python會有一個更乾淨的方式做這個,雖然考慮到它喜歡把自己提升爲一種語言,可以很容易地編寫乾淨的代碼 – JDOdle

+0

@JDOdle,但正如你所說*「自己並不真正」存在「,直到函數的主體「*,並且在定義時間設置默認參數值。當你還沒有完成對班級的定義時,就不可能有一個實例! Python優先考慮*可讀性*,其中的一部分是一致的概念模型。 – jonrsharpe

+0

@JDOdle我覺得這是一個相當乾淨的方式。如果你想用5種不同的版本重載一個函數,它可能會變得更乏味,但這是編譯語言給你的優勢。每種編程語言模型都以犧牲一些(已知的)缺點爲代價提供了一些優點。就像瓊斯哈普說的,這與每種語言認爲更重要的是什麼有關。有關私有方法的類似討論[這裏](https://stackoverflow.com/a/7456865/2243104)。在一天結束時,按照語言鼓勵你的方式處理你的代碼,而不是在另一個方面有意義。 – Reti43

相關問題