2017-01-12 6 views
3

私はPythonにはかなり新しく、Python3の型ヒント機能を発見して喜んでいました。私はPEP 484を読んで、this question on SOを見つけました。質問をした人が、なぜ関数の戻り値の型がチェックされていないのか不思議でした。回答者はPEP 484のセクションに、実行時にチェックが行われないこと、および外部ヒントが解析されることを意図していることを指摘しました。タイプヒントは関数の引数については適合しますが、戻り値の型は適合しません

私はのpython3のREPLを解雇し、これまでのところ

>>> def greeting() -> str: return 1 
>>> greeting() 
1 

とても良い、これを試してみることにしました。

>>> def greeting2(name: str) -> str: return 'hi ' + name 
>>> greeting2(2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in greeting2 
TypeError: Can't convert 'int' object to str implicitly 

それは、少なくとも関数のパラメータに関しては、そこにチェックしていると、のように思えるので、車輪が外れているように見えるところ今これは次のとおりです。私はこれを試してみましたので、私は、関数のパラメータについての好奇心です。私の質問は、なぜ戻り値の型ではなくパラメータをチェックするのですか?

+2

これはタイプチェックではありません。タイプヒントなしでこのエラーが発生します。 Pythonは強く型付けされた言語です。 –

+0

文字列ではなく整数で 'greeting2'を呼び出すことができるので、関数のパラメータの型をチェックしません。 –

答えて

5

Pythonは、実行時に型ヒントを使用しません(関数のパラメータや戻り値の型ではありません)。

述べたように
>>> 'hi ' + 2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: Can't convert 'int' object to str implicitly 

、タイプヒントは、実行時にチェックされません:あなたは、文字列と整数を連結しようとしているので、それはTypeErrorを取得している

>>> def greeting3(name): return 'hi ' + name 
... 
>>> greeting3(2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in greeting3 
TypeError: Can't convert 'int' object to str implicitly 

:からそれは全く違うませんエディタ/ツールによる開発中に使用することを意図しています。

+1

ああ。大丈夫ですよ。私はエラーのテキストにもっと注意を払う必要がありました。迅速な対応のためにt/y! –

関連する問題