Chociaż zdaję sobie sprawę z koncepcji pisania kaczego w Pythonie, czasami zmagam się z typem argumentów funkcji lub typem wartości zwracanej przez funkcję.
Otóż, jeśli sam napisałem tę funkcję, WIEMY typy. Ale co, jeśli ktoś chce używać i wywoływać moje funkcje, skąd ma znać typy? Zwykle umieszczam informacje o typie w dokumentacji funkcji (na przykład: "...the id argument should be an integer..."
i "... the function will return a (string, [integer]) tuple."
)
Ale czy wyszukiwanie informacji w dokumentacji (i umieszczanie ich tam, jako programista) naprawdę jest tak, jak powinno być zrobione?
Edycja: większość odpowiedzi wydaje się kierować w stronę „tak, dokument!” Uważam, że nie zawsze jest to łatwe w przypadku „złożonych” typów.
Na przykład: jak zwięźle opisać w łańcuchu dokumentacyjnym, że funkcja zwraca listę krotek, z każdą krotką w postaci (identyfikator_węzła, nazwa_węzła, uptime_minutes) i że elementy są odpowiednio łańcuchem, łańcuchem i liczbą całkowitą?
Dokumentacja dokumentacyjna PEP nie zawiera żadnych wytycznych w tym zakresie.
Wydaje mi się, że kontrargumentem będzie to, że w takim przypadku należy użyć klas, ale uważam, że Python jest bardzo elastyczny, ponieważ pozwala na przekazywanie tych rzeczy za pomocą list i krotek, tj. Bez klas.
Odpowiedzi:
Cóż, od 2011 roku trochę się zmieniło! Teraz w Pythonie 3.5 są wskazówki dotyczące typów, których możesz użyć do adnotacji argumentów i zwrócenia typu swojej funkcji. Na przykład to:
def greeting(name): return 'Hello, {}'.format(name)
można teraz zapisać w ten sposób:
def greeting(name: str) -> str: return 'Hello, {}'.format(name)
Jak widzisz teraz typy, istnieje pewne opcjonalne sprawdzanie typów statycznych, które pomoże Tobie i Twojemu kontrolerowi typów zbadać kod.
Aby uzyskać więcej wyjaśnień, proponuję zapoznać się z wpisem na blogu dotyczącym podpowiedzi typu na blogu PyCharm .
źródło
Tak działają języki dynamiczne. Nie zawsze jest to jednak dobre, zwłaszcza jeśli dokumentacja jest słaba - ktoś próbował użyć słabo udokumentowanego frameworka Pythona? Czasami trzeba wrócić do czytania źródła.
Oto kilka strategii pozwalających uniknąć problemów z pisaniem na klawiaturze:
Również jeden z najważniejszych punktów:
Powinno być przekazywanych tylko kilka dobrze zdefiniowanych i udokumentowanych typów. Cokolwiek innego powinno być oczywiste, patrząc na kod: nie używaj dziwnych typów parametrów pochodzących z daleka, których nie możesz zrozumieć, patrząc w pobliże kodu ...
Powiązana (a także związana z dokumentacją) jest w Pythonie technika o nazwie
doctests
. Skorzystaj z tego, aby udokumentować, w jaki sposób Twoje metody mają być używane - i jednocześnie mieć ładne pokrycie testów jednostkowych!źródło
Byłam na kursie coursera, była lekcja, na której uczono nas o przepisie na projekt.
Poniższy format docstrów okazał się przydatny.
Myślę, że napisanie w ten sposób ciągów dokumentów może bardzo pomóc programistom.
Link do wideo [Obejrzyj wideo] : https://www.youtube.com/watch?v=QAPg6Vb_LgI
źródło
Tak, powinieneś używać ciągów dokumentacyjnych, aby uczynić swoje klasy i funkcje bardziej przyjaznymi dla innych programistów:
Więcej: http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring
Niektóre edytory umożliwiają wyświetlanie ciągów dokumentów podczas pisania, więc naprawdę ułatwia to pracę.
źródło
Tak to jest.
W Pythonie funkcja nie zawsze musi zwracać zmienną tego samego typu (chociaż twój kod będzie bardziej czytelny, jeśli twoje funkcje zawsze zwracają ten sam typ). Oznacza to, że nie możesz określić jednego typu zwracanego dla funkcji.
W ten sam sposób parametry nie zawsze muszą być tego samego typu.
źródło
Um ... Nie ma żadnego „zwięzłego” opisu tego. To skomplikowane. Zaprojektowałeś to jako złożone. I wymaga złożonej dokumentacji w dokumentacji.
Przepraszamy, ale złożoność jest - cóż - złożona.
źródło
Tak, ponieważ jest to język typu dynamicznego;)
Przeczytaj to w celach informacyjnych: PEP 257
źródło
Dokumenty (i ogólnie dokumentacja). Python 3 wprowadza (opcjonalne) adnotacje funkcji, jak opisano w PEP 3107 (ale nie pomijaj ciągów dokumentów)
źródło