Właśnie widziałem następujący przykład w PEP 484:Jak/dlaczego działa podpowiedź typu Python?
def greeting(name: str) -> str:
return 'Hello ' + name
print(greeting('Martin'))
print(greeting(1))
Zgodnie z oczekiwaniami, to nie działa w Pythonie 2:
File "test.py", line 1
def greeting(name: str) -> str:
^
SyntaxError: invalid syntax
jednak, że pracuje dla Python 3:
Hello Martin
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(greeting(1))
File "test.py", line 2, in greeting
return 'Hello ' + name
TypeError: Can't convert 'int' object to str implicitly
To było nieoczekiwane. To naprawdę nie ma sprawdzić typy jeszcze, jak widać z poniższego przykładu (to działa, ale nie wyjątek):
def greeting(name: str) -> int:
return 'Hello ' + name
print(greeting('Martin'))
Wydaje się, że po :
musi być nazwa funkcji , ale funkcja wydaje się być ignorowane:
def aha(something):
print("aha")
return something+"!"
def greeting(name: aha, foo) -> int:
return 'Hello ' + name + foo
print(greeting('Martin', 'ad'))
To samo wydaje się być prawdziwe nazwy po ->
.
Czy ten typ podpowiedzi składni używa czegoś innego (np. Język Java Modeling korzysta z komentarzy)? Kiedy ta składnia została wprowadzona do Pythona? Czy istnieje sposób sprawdzania statycznego już przy użyciu tej składni? Czy zawsze łamie kompatybilność z Pythonem 2?
Czy znasz narzędzia, które wykorzystują to do sprawdzania typu? –
@moose: PEP został zainspirowany przez [mypy] (http://www.mypy-lang.org/). –
@moose: PyCharm obsługuje także składnię adnotacji, zobacz https://www.jetbrains.com/pycharm/help/type-hinting-in-pycharm.html –