PEP 484で次の例を見たところです。
def greeting(name: str) -> str:
return 'Hello ' + name
print(greeting('Martin'))
print(greeting(1))
予想どおり、これは Python 2 では機能しません。
File "test.py", line 1
def greeting(name: str) -> str:
^
SyntaxError: invalid syntax
ただし、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
これは予想外でした。次の例でわかるように、実際には型をまだチェックしていません (実行されますが、例外はスローされません)。
def greeting(name: str) -> int:
return 'Hello ' + name
print(greeting('Martin'))
の後に:
関数の名前を指定する必要があるように見えますが、関数は無視されているようです。
def aha(something):
print("aha")
return something+"!"
def greeting(name: aha, foo) -> int:
return 'Hello ' + name + foo
print(greeting('Martin', 'ad'))
の後の名前も同様のようです->
。
この型ヒンティング構文は何か他のものを使用していますか (Java モデリング言語がコメントを利用するなど)? この構文はいつ Python に導入されましたか? この構文で既に静的型チェックを行う方法はありますか? Python 2 の互換性は常に失われますか?