2014-10-08 17 views
7

Bazen bir işlev, çıktı akışına göndermek yerine atmak istediğiniz bir geri dönüş değeri verir. Bunu halletmenin en iyi yolu ne olurdu?Bir Python işlevinin bazı dönüş değerlerini zarifçe nasıl yok sayılır?

Değiştiremeyeceğiniz bir şey döndüren bir işlevden söz ettiğimizi unutmayın.

def fn(): 
    return 5 

Ben şahsen önce null kullanmış, ama daha pythonic yol arıyorum:

null = fn() 
+0

"Çıktı akışına gönder" ile ne demek istiyorsunuz? – BrenBarn

+0

Sadece global kapsamdaki fn() 'yi değerlendirmek 5 değerini" yazdırabilir ". – PascalVKooten

+6

Bu yalnızca etkileşimli yorumlayıcıda geçerlidir. Bir dosyayı bir komut dosyası olarak çalıştırırsanız, hiçbir şey etkilemez. Bir etkileşimli oturumda çıktıyı bastırma ihtiyacının, sahip olduğunuz çözümden daha fazlasını garanti etmek için yeterince büyük bir anlaşma olduğunu düşünmüyorum. – BrenBarn

cevap

13

bunu göstermeye standart yolu _ istemediğiniz sonuçları atamaktır . bir işlev iki değeri döndürür ama sadece ilk istiyorsanız Örneğin, şöyle yapın:

value, _ = myfunction(param) 

En Python linter _ kullanımını tanımak ve kullanılmayan değişkenler şikayet olmaz.

Tüm iadeleri yok saymak isterseniz, herhangi bir şeye atamayın; Python bunu söylemezseniz sonuçla hiçbir şey yapmaz. Sonucu yazdırmak sadece Python kabuğundaki bir özelliktir.

+0

Bunu göz ardı etmiyorsunuz, onu global bir değişkene ataıyorsunuz. Nosklo'dan alıntı yapmak için: "bu" sözleşmesi ", bir başkasının koduna gettext işlevselliği eklediğinizde ('_' adlı bir işlev tanımlar) bu nedenle engellenir. Ya birisi son çıkışını girdi olarak kullanıyorsa? – JohnJohn

4

Gerçekten null atama fikir gibi - ama beklenmedik bir yan etkisi var: kim kod çoğunlukla Python olanlar için

>>> print divmod(5, 3) 
(1, 2) 
>>> x, null = divmod(5, 3) 
>>> print null 
2 

, bu muhtemelen bir sorun değildir: boş sadece olmalı kadar önemsiz bir değer _. Ancak, Javascript gibi diğer diller arasında geçiş yapıyorsanız, yanlışlıkla, Yok'la null ile bir karşılaştırma yapmak tamamen mümkündür. Üste | Bilinmeyen bir değişkenle karşılaştırmakla ilgili olağan yanılgıyı tükürmekten ziyade, Python sadece sessizce kabul eder ve şimdi tamamen beklemediğiniz doğru ve yanlış koşullar elde edersiniz. Bir saat için kod ve yanlış anlayamazsınız, aniden sana çarpana ve bir aptal gibi hissedene kadar.

bariz düzeltme çalışmıyor, ya: gerçekten hayal kırıklığı

>>> x, None = divmod(5, 3) 
File "<stdin>", line 1 
SyntaxError: cannot assign to None 

.... Python (ve gezegen üzerindeki her dili) bakılmaksızın iade kaç değişkenler arasında, örtülü atılır olmak parametrelerin tüm sağlar:

>>> divmod(5, 3) 

... ama açıkça parametreleri atmadan Bunları hiçbirine atayarak izin verilmiyor mu?

Python yorumlayıcısının aptalca bir sonuçtan ziyade, bir sözdizimi hatası yerine, hiçbiri bir sözdizimi hatası olarak atamayı karakterize etmek için bir tür aptalca hissediyor. Bunun için mantıklı düşünen var mı?

İlgili konular