Mam pewien rekurencyjny kod powrotu, który sprawdza, czy wybór jest ważny przed jego wykonaniem. Czy nie jest złym pomysłem zagnieżdżanie funkcji is_legal_choice
wewnątrz funkcji rekursywnej solve
? Czy ta funkcja wewnętrzna zostanie przedefiniowana za każdym razem, gdy wywoływana jest funkcja solve
?Czy wewnętrzna funkcja wewnątrz funkcji rekursywnej jest złym pomysłem?
Odpowiedz
Tak, wewnętrzna funkcja zostanie przedefiniowana za każdym razem, gdy funkcja zostanie wywołana. Jednak nie jest tak źle, jak można by przypuszczać; kod Pythona jest raz przetwarzany w obiekt kodu, a tylko obiekt funkcji (który służy jako rodzaj opakowania dla obiektu kodu) jest budowany od nowa za każdym razem.
Dziękuję za odpowiedź. Ma to sens i ma charakter informacyjny! – rookie
Tak, zostanie ponownie zdefiniowane za każdym razem, gdy zostanie wywołane. Jednak nie zawsze jest to zły pomysł. W ten sposób możesz zrobić zamknięcie, które czasami jest przydatne.
Jeśli twoja funkcja is_legal_choice
potrzebuje użyć pewnych danych, które są dostępne tylko w zakresie funkcji zewnętrznej, chciałbym powiedzieć, idź za tym. Narzut wydajności nie będzie zbyt duży (zawsze możesz profilować, jeśli potrzebujesz).
Jeśli is_legal_choice
nie potrzebuje żadnych danych z parametrów solve
, rób wszystko, co czyni twój kod bardziej zrozumiałym.
można znaleźć więcej informacji na temat zamknięć z google, ale oto przykład: http://ynniv.com/blog/2007/08/closures-in-python.html
- 1. Funkcja powrotu funkcji rekursywnej PHP
- 2. Czy zawijanie biblioteki C++ z ctypami jest złym pomysłem?
- 3. Czy używanie GCC -fms-extensions jest złym pomysłem?
- 4. Dlaczego kontynuowanie pracy w pętli jest złym pomysłem?
- 5. Czy używanie funkcji CreateUUID() jest dobrym pomysłem na sól?
- 6. Funkcja wewnątrz funkcji.?
- 7. Problem funkcji rekursywnej PHP?
- 8. Czy istnieje sposób na wstawienie funkcji rekursywnej?
- 9. Czy prezenter znający działanie/kontekst jest złym pomysłem we wzorcu MVP?
- 10. Czy przechowywanie javascript i css w bazie danych jest złym pomysłem?
- 11. foo.foo: Czy podanie kolumny tabeli o tej samej nazwie, co sama tabela, jest złym pomysłem?
- 12. Czy używanie nowego dynamicznego słowa kluczowego jako instrukcji zastępczej przełącznika jest złym pomysłem?
- 13. ASP.NET MVC - Czy zwracanie różnych widoków z pojedynczego działania kontrolera jest złym pomysłem?
- 14. Czy to jest wewnętrzna klasa?
- 15. C# Czy action.BeginInvoke (action.EndInvoke, null) jest dobrym pomysłem?
- 16. Czy prymitywne parametry konstruktora są złym pomysłem podczas korzystania z kontenera IoC?
- 17. Używanie itertools do aplikacji funkcji rekursywnej
- 18. deklaracja C funkcja wewnątrz innej funkcji
- 19. Funkcja klasy zagnieżdżonej Golang wewnątrz funkcji
- 20. Dlaczego PHP uważa, że złym pomysłem jest poleganie na strefie czasowej systemu?
- 21. Zamawianie funkcji rekursywnej skutkuje tablicami tablic
- 22. funkcji wewnątrz funkcji
- 23. jak przekazać wynik funkcji rekursywnej do wyświetlenia
- 24. Wymiar wielkości stosu za pomocą funkcji rekursywnej
- 25. setTimeout() na funkcji rekursywnej w ramach funkcji self invoking
- 26. Czy użycie Any dla typu Union jest dobrym pomysłem?
- 27. Wywołanie funkcji zdefiniowanej wewnątrz innej funkcji w JavaScript
- 28. Przekazywanie PHP przez odwołanie w funkcji rekursywnej nie działa
- 29. Funkcja i funkcja zmiennych funkcji gambang
- 30. Powrót do wywołania najwyższego poziomu funkcji rekursywnej w Lisp
Funkcja * * Obiekt zostanie odtworzony za każdym razem swoją funkcją jest tzw. To nie jest tak źle, jak się wydaje; obiekt kodu jest już obecny, a tworzenie obiektu funkcji jest stosunkowo lekkie. –
Jeśli ma to sens z punktu widzenia konserwacji/czytelności, nie przejmuj się nadmiernie kosztem tworzenia funkcji obiektu. –
@MartijnPieters: Zrobię to ... dzięki! – rookie