Korzystając z adnotacji funkcji Python 3, można określić typ elementów zawartych w jednorodnej liście (lub innej kolekcji) w celu podpowiedzi typu w PyCharm i innych IDE?
Przykład kodu w pseudo-Pythonie dla listy int:
def my_func(l:list<int>):
pass
Wiem, że jest to możliwe przy użyciu Docstring ...
def my_func(l):
"""
:type l: list[int]
"""
pass
... ale wolę styl adnotacji, jeśli to możliwe.
python
python-3.x
type-hinting
Eric W.
źródło
źródło
type object is not subscriptable
podczas definiowania funkcji. Oczywiście możesz użyć ciągu znaków:def my_func(L: 'list[int]')
ale nie wiem, czy PyCharm przeanalizuje go podczas analizowania dokumentów ...'list[int]'
przeprosiny, jeśli to nie było jasne.Odpowiedzi:
Odpowiadając na moje własne pytanie; odpowiedź TLDR brzmi:
nie,tak .Zaktualizuj 2
We wrześniu 2015 r. Wydano język Python 3.5 z obsługą podpowiedzi typu i zawiera nowy moduł do pisania . Pozwala to na określenie typów zawartych w kolekcjach. Od listopada 2015 r. JetBrains PyCharm 5.0 w pełni obsługuje język Python 3.5, uwzględniając wskazówki dotyczące typów, jak pokazano poniżej.
Zaktualizuj 1
Od maja 2015 r. PEP0484 (Wskazówki dotyczące typu) został formalnie zaakceptowany. Projekt implementacji jest również dostępny na github w ambv / typehinting .
Oryginalna odpowiedź
Od sierpnia 2014 r. Potwierdziłem, że nie można używać adnotacji typu Python 3 do określania typów w kolekcjach (np. Lista ciągów).
Użycie sformatowanych ciągów dokumentów, takich jak reStructuredText lub Sphinx, jest realną alternatywą i jest obsługiwane przez różne środowiska IDE.
Wydaje się również, że Guido rozważa możliwość rozszerzenia adnotacji typu w duchu mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html
źródło
Teraz, gdy Python 3.5 jest oficjalnie dostępny, istnieje moduł wspierający Wskazówki dotyczące typów -
typing
i odpowiedniList
„typ” dla kontenerów ogólnych.Innymi słowy, teraz możesz:
źródło
Komentarze typu zostały dodane od PEP 484
Obecnie pracuję dla mnie nad PyCharm z Pythonem 3.6.4
Przykładowe zdjęcie w Pycharm
źródło
Dzięki wsparciu z BDFL, jest prawie pewne, że Python (prawdopodobnie 3.5) zapewni standardową składnię dla wskazówek dotyczących typów poprzez adnotacje funkcji.
https://www.python.org/dev/peps/pep-0484/
Jak wspomniano w PEP, istnieje eksperymentalna funkcja sprawdzania typów (coś w rodzaju pylint, ale dla typów) o nazwie mypy, która już korzysta z tego standardu i nie wymaga nowej składni.
http://mypy-lang.org/
źródło
Począwszy od Pythona 3.9, typy wbudowane są ogólne w odniesieniu do adnotacji typu (patrz PEP 585 ). Pozwala to bezpośrednio określić rodzaj elementów:
Różne narzędzia mogą obsługiwać tę składnię wcześniej niż Python 3.9. Gdy adnotacje nie są sprawdzane w czasie wykonywania, składnia jest poprawna przy użyciu cytowania lub
__future__.annotations
.źródło