2014-10-08 25 views
7

Czasami funkcja daje wartość zwracaną, którą chcesz raczej odrzucić, a nie wysłać do strumienia wyjściowego. Jaki byłby elegancki sposób na poradzenie sobie z tym?Jak elegancko ignorować niektóre zwracane wartości funkcji Pythona?

Pamiętaj, że mówimy o funkcji, która zwraca coś, czego nie możesz zmienić.

def fn(): 
    return 5 

Ja osobiście używane null wcześniej, ale szukam bardziej pythonic sposób:

null = fn() 
+0

Co masz na myśli przez "wysłać do strumienia wyjściowego"? – BrenBarn

+0

Ocena samego 'fn()' w zasięgu globalnym spowoduje "wydrukowanie" wartości 5. – PascalVKooten

+6

Jest to prawdą tylko w interpretera interaktywnym. Nie pojawi się, jeśli uruchomisz plik jako skrypt i nie wpłynie to na nic. Nie uważam, że potrzeba tłumienia wyników w sesji interaktywnej jest wystarczająco duża, aby zagwarantować coś więcej niż rozwiązanie, które już posiadasz. – BrenBarn

Odpowiedz

13

Standardowym sposobem, aby pokazać ten jest przypisanie wyników nie chcą _ . Na przykład, jeśli funkcja zwraca dwie wartości, ale chcą tylko pierwszą, to zrobić:

value, _ = myfunction(param) 

Większość Python Linters rozpozna wykorzystanie _ i nie narzekają nieużywanych zmiennych.

Jeśli chcesz zignorować wszystkie zwroty, po prostu nie przypisuj do niczego; Python nic nie robi z wynikiem, chyba że mu to powiesz. Drukowanie wyniku jest funkcją tylko w powłoce Pythona.

+0

Nie ignorujesz tego, przypisujesz go do zmiennej globalnej. Cytat z nosklo: "ta" konwencja "jest do bani, gdy dodajesz funkcję gettext do cudzego kodu (który definiuje funkcję o nazwie" _ "), więc powinna zostać zbanowana". Co jeśli ktoś użyje ostatniego wyjścia jako wejścia? – JohnJohn

4

bardzo podoba mi się pomysł przypisanie null - ale ma nieoczekiwany efekt uboczny:

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

dla tych, którzy kod głównie w Pythonie, to prawdopodobnie nie jest to problem: null powinny być po prostu tyle samo wartości śmieciowej co _.

Jednak jeśli przełączanie innych językach takich jak JavaScript, to całkiem możliwe, aby przypadkowo napisać porównanie z wartością null zamiast Żaden. Zamiast wypowiadać zwykły błąd dotyczący porównywania z nieznaną zmienną, Python po cichu zaakceptuje to, a teraz uzyskujesz prawdziwe i fałszywe warunki, których całkowicie nie oczekujesz ... to jest ten rodzaj błędu, w którym patrzysz kod na godzinę i nie może się domyślić, że jest źle, dopóki nie uderzy cię nagle i nie poczujesz się jak idiota.

Oczywistym fix nie działa, albo:

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

... co jest bardzo rozczarowujące. Python (i każdy inny język na świecie) pozwala wszystkie parametrów być niejawnie wyrzucać, niezależnie od tego, ile zmienne są zwracane:

>>> divmod(5, 3) 

... ale explicite wyrzucać parametry przypisanie ich do None jest niedozwolone?

To trochę głupie z interpretatora Pythona, aby scharakteryzować przypisanie do Brak jako błędu składni, a nie celowy wybór z jednoznacznym wynikiem. Czy ktokolwiek może pomyśleć o takiej racji?

Powiązane problemy