2014-07-20 21 views
31

Przy pomocy adnotacji funkcji Python 3, możliwe jest określenie typu elementów zawartych w jednorodnej liście (lub innej kolekcji) do celów podpowiedzi typu w PyCharm i inne IDE?Python 3 Adnotacje: wpisz wskazówkę dla listy określonego typu (PyCharm)

przykład kodu pseudo-python do listy int:

def my_func(l:list<int>): 
    pass 



wiem, że to możliwe przy użyciu Docstring ...

def my_func(l): 
    """ 
    :type l: list[int] 
    """ 
    pass 

... ale ja wolę adnotacji styl, jeśli to możliwe.

+0

Czy próbowałeś użyciu tego samego formatu w adnotacjach funkcyjnych? Co się stało? – jonrsharpe

+0

@jonrsharpe Powinien wywołać błąd, ponieważ "obiekt typu nie jest indeksowalny" podczas definiowania funkcji. Oczywiście możesz użyć ciągu: 'def my_func (L: 'list [int]')', ale nie wiem, czy PyCharm przetworzy go podczas analizowania docstrukcji ... – Bakuriu

+0

@Bururiu tak, miałem na myśli '' [int] ", przepraszam, jeśli to nie było jasne. – jonrsharpe

Odpowiedz

50

Odpowiadając na moje własne pytanie; odpowiedź TLDR to nr Tak.

Aktualizacja 2

We wrześniu 2015 roku, Python 3.5 została wydana dzięki wsparciu dla typu wskazówki i zawiera new typing module. 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, aby zawierał podpowiedzi typowe, jak pokazano poniżej.

PyCharm 5.0 Code Completion using Type Hints

Update 1

W maju 2015 PEP0484 (Type Hints) został formalnie zaakceptowany. Projekt implementacji jest również dostępny pod numerem github under ambv/typehinting.

Original Odpowiedź

Począwszy od sierpnia 2014 roku, I potwierdziły, że nie jest możliwe użycie Python 3 typ adnotacji, aby określić typy ciągu zbiorów (np listą ciągów).

Korzystanie z sformatowanych poleceń, takich jak reStructuredText lub Sphinx, jest wykonalnymi alternatywami i obsługiwane przez różne środowiska IDE.

Wydaje się również, że Guido jest rozmyślałem nad idei rozszerzenia typu adnotacji w duchu mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html

+0

Aktualizacja: Wygląda na to, że podpowiedzi do typów dla typów ogólnych trafiły do ​​PEP484 https://www.python.org/dev/peps/pep-0484/ –

+7

Awansuj, aby wrócić i zaktualizować odpowiedź! Rekwizyty dla ciebie, proszę pana! :) – Pretzel

4

przy wsparciu BDFL, to już prawie pewne, że Python (prawdopodobnie 3.5) będzie stanowić standardową składnię dla podpowiedzi typu za pomocą adnotacji funkcji.

https://www.python.org/dev/peps/pep-0484/

jak podano w PEP, nie jest eksperymentalnym typu sprawdzania (niby jak pylint, ale dla typów) o nazwie mypy które już używają tego standardu i nie wymaga żadnej nowej składni.

http://mypy-lang.org/

16

Teraz, Python 3.5 jest oficjalnie na zewnątrz, nie ma wskazówki wspierające Rodzaj modułu - typing i odpowiedni List „typ” dla ogólnych pojemników.

Innymi słowy, teraz można zrobić:

from typing import List 

def my_func(l: List[int]): 
    pass 
Powiązane problemy