Jestem w trakcie nauki języka Python i dotarłem do sekcji o tym pass
stwierdzeniu. Przewodnik, którego używam, definiuje go jako Null
instrukcję, która jest powszechnie używana jako symbol zastępczy.
Nadal jednak nie do końca rozumiem, co to znaczy. Czy ktoś może mi pokazać prostą / podstawową sytuację, w której pass
oświadczenie byłoby użyte i dlaczego jest potrzebne?
pass
że przydałoby się, gdy chcesz zastąpić metodę w podklasie, aby nic nie robić.pass
wexcept
bloku jest bardzo przydatna.Odpowiedzi:
Załóżmy, że projektujesz nową klasę za pomocą metod, których jeszcze nie chcesz wdrożyć.
Jeśli pominiesz
pass
kod, kod nie uruchomi się.Otrzymasz wtedy:
Podsumowując,
pass
oświadczenie nie robi nic szczególnego, ale może działać jako symbol zastępczy, jak pokazano tutaj.źródło
return
, choć z niewielką utratą przejrzystości.pass
, ale nadal nie rozumiem, co to robi. Czy ma to zastosowanie w kodzie produkcyjnym? W twoim przykładzie wolałbym nie dodawać tej metody, dopóki nie będę gotowy do jej wdrożenia, lub po prostu zrobię toreturn
.Python ma syntaktyczną wymóg, że bloki kodu (po
if
,except
,def
,class
itd.) Nie mogą być puste. Puste bloki kodu są jednak przydatne w różnych kontekstach, na przykład w poniższych przykładach, które są najczęstszymi przypadkami użycia, jakie widziałem.Dlatego, jeśli nic nie ma się wydarzyć w bloku kodu,
pass
potrzebny jest a , aby taki blok nie wygenerowałIndentationError
. Alternatywnie można zastosować dowolne stwierdzenie (w tym tylko termin do oceny, taki jakEllipsis
literał...
lub ciąg, najczęściej dokumentacja), alepass
wyjaśnia, że rzeczywiście nic się nie powinno zdarzyć i nie trzeba go tak naprawdę oceniać i (przynajmniej tymczasowo) przechowywane w pamięci.Ignorowanie (wszystkie lub) określonego rodzaju
Exception
(przykład zxml
):Uwaga: Ignorowanie wszystkich rodzajów podwyżek, jak w poniższym przykładzie
pandas
, jest ogólnie uważane za złą praktykę, ponieważ wychwytuje również wyjątki, które prawdopodobnie powinny zostać przekazane do dzwoniącego, np.KeyboardInterrupt
LubSystemExit
(a nawetHardwareIsOnFireError
- Skąd wiesz, że nie jesteś działający na niestandardowym polu ze zdefiniowanymi konkretnymi błędami, o których niektóre aplikacje dzwoniące chcieliby wiedzieć?).Zamiast tego stosowanie przynajmniej
except Error:
lub w tym przypadku najlepiejexcept OSError:
jest uważane za znacznie lepszą praktykę. Szybka analiza wszystkich modułów Pythona, które zainstalowałem, dała mi doexcept ...: pass
zrozumienia, że ponad 10% wszystkich instrukcji przechwytuje wszystkie wyjątki, więc nadal jest to częsty wzorzec w programowaniu w Pythonie.Wyprowadzanie klasy wyjątku, która nie dodaje nowego zachowania (np. In
scipy
):Podobnie, klasy zaprojektowane jako abstrakcyjna klasa podstawowa często mają jawnie puste
__init__
lub inne metody, które powinny być wyodrębnione w podklasach. (np.pebl
)Testowanie tego kodu działa poprawnie dla kilku wartości testowych, bez dbania o wyniki (z
mpmath
):W definicjach klas lub funkcji często istnieje już dokumentacja jako obowiązkowa instrukcja, którą należy wykonać jako jedyną w bloku. W takich przypadkach blok może zawierać
pass
oprócz docstring, aby powiedzieć „To naprawdę nie ma zamiaru nic robić”, na przykład wpebl
:W niektórych przypadkach
pass
jest używany jako symbol zastępczy, aby powiedzieć „Ta metoda / klasa / if-block / ... nie została jeszcze zaimplementowana, ale będzie to miejsce, w którym można to zrobić”, chociaż osobiście wolęEllipsis
literał...
, aby dokładnie rozróżnij to od celowego „braku op” w poprzednim przykładzie. ( Zauważ, że literał Ellipsis jest poprawnym wyrażeniem tylko w Pythonie 3 )Na przykład, jeśli piszę model szerokimi pociągnięciami, mogę napisać
gdzie inni mogą mieć
przed
jako przypomnienie o wypełnieniu
update_agent
funkcji w późniejszym czasie, ale uruchom już kilka testów, aby sprawdzić, czy reszta kodu zachowuje się zgodnie z przeznaczeniem. (Trzecią opcją w tym przypadku jestraise NotImplementedError
. Jest to przydatne w szczególności w dwóch przypadkach: Albo „Ta abstrakcyjna metoda powinna zostać zaimplementowana przez każdą podklasę, nie ma ogólnego sposobu jej zdefiniowania w tej klasie bazowej” , albo „Ta funkcja z ta nazwa nie jest jeszcze zaimplementowana w tej wersji, ale tak będzie wyglądać jej podpis ” )źródło
Oprócz użycia jako symbolu zastępczego dla niezaimplementowanych funkcji,
pass
może być przydatny w wypełnianiu instrukcji if-else („Jawne jest lepsze niż niejawne”).Oczywiście w tym przypadku prawdopodobnie użyłbyś
return
zamiast przypisania, ale w przypadkach, w których pożądana jest mutacja, działa to najlepiej.Użycie
pass
tutaj jest szczególnie przydatne, aby ostrzec przyszłych opiekunów (w tym ciebie!), Aby nie umieszczali zbędnych kroków poza instrukcjami warunkowymi. W powyższym przykładzieflag
jest ustawiony w dwóch konkretnie wymienionych przypadkach, ale nie w-else
case. Bez użyciapass
przyszły programista może wyjśćflag = True
poza ten warunek - w ten sposób ustawiającflag
we wszystkich przypadkach.Innym przypadkiem jest funkcja płyty kotłowej często widywana na dole pliku:
W niektórych plikach warto pozostawić tę opcję,
pass
aby ułatwić późniejszą edycję i wyjaśnić, że nic się nie dzieje, gdy plik jest uruchamiany samodzielnie.Wreszcie, jak wspomniano w innych odpowiedziach, przydatne może być nic nie robić, gdy zostanie wychwycony wyjątek:
źródło
flag = False
przedif ... elif
blokiem, aby zapobiec późniejszym niejasnym błędom „Błąd nazwy: nazwa flagi nie jest zdefiniowana”. Jeśli chodzi o drugi przykład, wydaje się, że bizzar musi dodaćif __name__ == "__main__": pass
do większości plików Pythona, które nie wykonują niczego, gdy są wykonywane bezpośrednio (co ma miejsce w przypadku pisania kodu modułowego). W Pythonie> = 3.0 powinieneś używać...
(Ellipsis) zamiastpass
oznaczać bloki „kończ później”.Najlepszym i najdokładniejszym sposobem myślenia
pass
jest sposób, aby wyraźnie powiedzieć tłumaczowi, aby nic nie robił. W ten sam sposób następujący kod:oznacza „jeśli wywołam funkcję foo (x, y), zsumuj dwie liczby, które reprezentują etykiety xiy i przekaż wynik”,
oznacza „Jeśli wywołam funkcję bar (), nie rób absolutnie nic”.
Pozostałe odpowiedzi są całkiem poprawne, ale przydają się również w przypadku kilku rzeczy, które nie wymagają trzymania miejsca.
Na przykład w odrobinie kodu, nad którym niedawno pracowałem, konieczne było podzielenie dwóch zmiennych, a dzielnik mógł mieć wartość zero.
wytworzy oczywiście ZeroDivisionError, jeśli b wynosi zero. W tej konkretnej sytuacji pozostawienie c jako zera było pożądanym zachowaniem w przypadku, gdy b było zerem, więc użyłem następującego kodu:
Innym, mniej standardowym sposobem użycia jest przydatne miejsce do ustawienia punktu przerwania dla debuggera. Na przykład chciałem, aby trochę kodu włamało się do debuggera podczas dwudziestej iteracji instrukcji for ... in. Więc:
z punktem przerwania przy przejściu.
źródło
def bar(): pass
nie robi „absolutnie nic”. Nadal powracaNone
, domyślnie.Typowym przypadkiem użycia, w którym można go używać „tak jak jest”, jest zastąpienie klasy tylko w celu utworzenia typu (który w przeciwnym razie jest taki sam jak nadklasa), np.
Możesz więc wychowywać i wychwytywać
Error
wyjątki. Liczy się tutaj wyjątek, a nie treść.źródło
pass
w Pythonie w zasadzie nic nie robi, ale w przeciwieństwie do komentarza nie jest ignorowane przez interpretera. Możesz więc z niego skorzystać w wielu miejscach, ustawiając go na miejsce:1: Może być stosowany w klasie
2: Można używać w pętli i instrukcjach warunkowych:
3: Może być użyty w funkcji:
pass
jest najczęściej używany, gdy programista nie chce w tej chwili podać implementacji, ale nadal chce utworzyć pewną instrukcję klasy / funkcji / warunkową, z której można będzie później skorzystać. Ponieważ interpreter języka Python nie zezwala na pustą lub niezaimplementowaną instrukcję class / function / conditional, pojawia się błąd:pass
może być stosowany w takich scenariuszach.źródło
Można powiedzieć, że podanie oznacza operację NOP (brak operacji). Otrzymasz wyraźny obraz po tym przykładzie: -
Program C.
Teraz, jak napiszesz to w Pythonie: -
Ale twój kod da błąd, ponieważ wymagał wcięcia po elifie . Oto rola słowa kluczowego pass .
Teraz myślę, że to dla ciebie jasne.
źródło
&&
operator nie istnieje w PythonieLubię go używać podczas testowania. Często zdaję sobie sprawę z tego, co chciałbym przetestować, ale nie bardzo wiem, jak to zrobić. Przykład testowy wygląda tak, jak sugerował sebastian_oe
źródło
assert False
alboassert 0
w ten sposób zawsze będziesz zauważyć należy dodać realizację :)Instrukcja pass nic nie robi. Można go użyć, gdy instrukcja jest wymagana składniowo, ale program nie wymaga działania.
źródło
Szczerze mówiąc, myślę, że oficjalne dokumenty Pythona opisują to całkiem dobrze i podają kilka przykładów:
źródło
jak napisano w książce, używam go tylko jako tymczasowego symbolu zastępczego, tj.
a następnie wypełnij scenariusz, w którym
var == 2000
źródło
Przekazanie odnosi się do zignorowania .... tak proste, jak to jest ... jeśli podany warunek jest spełniony, a następna instrukcja jest zaliczona, ignoruje tę wartość lub iterację i przechodzi do następnego wiersza ..... Przykład
Wyjście: Drukuje wszystkie nieparzyste liczby od 1-100
Wynika to z faktu, że moduł liczby parzystej jest równy zeru, dlatego ignoruje liczbę i przechodzi do następnej liczby, ponieważ moduł liczb nieparzystych nie jest równy zeru, inna część pętli jest wykonywana i drukowana
źródło
SyntaxError
. Nie jest to również dobre zastosowanie,pass
ponieważ można po prostu to zrobićfor i in range(1,100):print(i)if i%2else""
Oto przykład, w którym wyodrębniałem określone dane z listy, na której miałem wiele typów danych (tak to nazwałbym w R - przepraszam, jeśli jest to niewłaściwa nomenklatura) i chciałem wyodrębnić tylko liczby całkowite / numeryczne, a NIE dane znakowe .
Dane wyglądały następująco:
Chciałem usunąć wszystkie znaki alfabetyczne, więc kazałem maszynie to zrobić, dzieląc dane i „przekazując” dane alfabetyczne:
źródło
Instrukcja pass w Pythonie jest używana, gdy instrukcja jest wymagana składniowo, ale nie chcesz, aby komenda lub kod były wykonywane.
Instrukcja pass jest operacją zerową; nic się nie dzieje, gdy się wykonuje. Przełęcz jest również przydatna w miejscach, w których twój kod ostatecznie przejdzie, ale nie został jeszcze napisany (np. W kodach pośrednich):
`Przykład:
Spowoduje to następujący wynik:
Poprzedni kod nie wykonuje żadnej instrukcji ani kodu, jeśli wartość litery to „h”. Instrukcja pass jest pomocna po utworzeniu bloku kodu, ale nie jest już wymagana.
Następnie możesz usunąć instrukcje wewnątrz bloku, ale niech blok pozostanie z instrukcją pass, aby nie zakłócała innych części kodu.
źródło
pass służy do uniknięcia błędu wcięcia w pythonie Jeśli weźmiemy języki takie jak c, c ++, java, mają one nawiasy klamrowe jak
Ale w pythonie używał wcięcia zamiast nawiasów klamrowych, więc aby uniknąć takich błędów, używamy pass. Pamiętam, jak grałeś w quiz i
Przykładowy program,
źródło