` typevar ' s説明
Pythonでタイプの注釈に全く慣れていないなら、私はあなたを始めるべきです.
この投稿では、型変数の使用方法を示します
問題
この関数は引数として何かを受け取り、そのまま返します.返り値の型が同じ型のチェッカーについてどう説明しますか
なぜ使用しない
本当に欲しい
なぜ別のタイプの機能を特殊化しないのですか?
これはよくスケールしません.あなたは10回同じ機能を複製するつもりですか?あなたが同期してそれらを維持することを覚えていますか? これがライブラリ機能ならば何か?あなたは人々がこの機能を使用するすべての方法を予測することができなくなります.
解決策:型変数
型変数を使用すると、いくつかの型を一緒にリンクできます.このようにすると、型変数を使用して
このようにして動作しているのです(
型変数への制約の追加
これは整形式の関数ですか?
「パスしたら
それは十分に公正である.私たちは、私たちのタイプ変数が受け入れるだけである制限を置くことができます
型変数をパラメータとして使用する
また、型変数をパラメータとしてジェネリック型に使用することもできます
リンク
この投稿では、型変数の使用方法を示します
TypeVar
s、楽しさと利益のため.問題
この関数は引数として何かを受け取り、そのまま返します.返り値の型が同じ型のチェッカーについてどう説明しますか
arg
?def identity(arg):
return arg
なぜ使用しない
Any
?def identity(arg: Any) -> Any:
return arg
あなたが使うならばAny
, タイプチェッカーはこの機能がどのように機能するかを理解しません:それが心配する限り、機能は全く何でも返すことができます.返り値の型はarg
.本当に欲しい
number
あるint
ここで、型チェッカーが次の行でエラーをキャッチします.なぜ別のタイプの機能を特殊化しないのですか?
def identity_int(arg: int) -> int:
return arg
def identity_int(arg: str) -> str:
return arg
def identity_list_str(arg: list[str]) -> list[str]:
return arg
...
解決策:型変数
型変数を使用すると、いくつかの型を一緒にリンクできます.このようにすると、型変数を使用して
identity
機能from typing import TypeVar
T = TypeVar("T")
def identity(arg: T) -> T:
return arg
ここで、戻り値の型はパラメーター型に“リンク”されます.関数に入れたものは何でも同じことが出ます.このようにして動作しているのです(
型変数への制約の追加
これは整形式の関数ですか?
def triple(string: Union[str, bytes]) -> Union[str, bytes]:
return string * 3
実際には:あなたが文字列を渡す場合は、常に文字列を、同じバイトを取得します.これはあなたがいくつかの痛みを引き起こすでしょうstr
そして、あなたが得るときbytes
バック.「パスしたら
str
, あなたが得るstr
. あなたが通るならばbytes
, あなたが得るbytes
----タイプ変数の仕事のようですね.それは十分に公正である.私たちは、私たちのタイプ変数が受け入れるだけである制限を置くことができます
str
or bytes
(そしてサブクラスはもちろん).AnyString = TypeVar("AnyString", str, bytes)
def triple(string: AnyString) -> AnyString:
return string * 3
unicode_scream = triple("A") + "!"
bytes_scream = triple(b"A") + b"!"
型変数をパラメータとして使用する
また、型変数をパラメータとしてジェネリック型に使用することもできます
list
or Iterable
.def remove_falsey_from_list(items: list[T]) -> list[T]:
return [item for item in items if item]
def remove_falsey(items: Iterable[T]) -> Iterator[T]:
for item in items:
if item:
yield item
Howver、これはトリッキーかなり速い取得します.次の記事で詳しく説明します.リンク
mypy
ジェネリック関数のドキュメントhttps://mypy.readthedocs.io/en/stable/generics.html#generic-functions Reference
この問題について(` typevar ' s説明), 我々は、より多くの情報をここで見つけました https://dev.to/decorator_factory/typevars-explained-hmoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol