Heim > Artikel > Backend-Entwicklung > Best Practices für Typhinweise in Python
Die Verwendung dynamischer Sprache ist ein vorübergehendes Vergnügen, und der Code wird im Krematorium rekonstruiert. Ich glaube, Sie müssen diesen Satz gehört haben. Obwohl das Schreiben von Code ein wenig Zeit in Anspruch nimmt, lohnt es sich auf lange Sicht sehr. In diesem Artikel erfahren Sie, wie Sie die Typhinweise von Python besser verstehen und verwenden können.
Typhinweise (eingeführt seit PEP 3107) werden zum Hinzufügen von Typen zu Variablen, Parametern, Funktionsparametern und deren Rückgabewerten, Klasseneigenschaften und Methoden verwendet.
Die Variablentypen von Python sind dynamisch und können zur Laufzeit geändert werden, um dem Code Typhinweise hinzuzufügen. Sie werden nur auf Syntaxebene unterstützt und haben keinen Einfluss auf die Ausführung des Codes Code.
Daher besteht eine intuitive Funktion von Typhinweisen darin, die Lesbarkeit des Codes zu verbessern, es dem Aufrufer zu erleichtern, Parameter des entsprechenden Typs ein-/auszugeben und die Coderekonstruktion zu erleichtern.
Pythons integrierte Basistypen können direkt für Typhinweise verwendet werden:
Beispiele für Typhinweise für Variablen:
a: int = 3 b: float = 2.4 c: bool = True d: list = ["A", "B", "C"] e: dict = {"x": "y"} f: set = {"a", "b", "c"} g: tuple = ("name", "age", "job")
Typhinweise für Funktionen:
def add_numbers(x: type_x, y: type_y, z: type_z= 100) -> type_return: return x + y + z
type_x, type_y, type_z, type_return können hier integrierte Basistypen sein , oder Kann ein benutzerdefinierter Typ sein.
Hinweise zum Klassentyp:
class Person: first_name: str = "John" last_name: str = "Does" age: int = 31
Weitere Informationen zu Mypy finden Sie im vorherigen Artikel Typhinweise sehr praktisch.
3. Vorteile von TyphinweisenWenn der Interpreter keine Typhinweise erzwingt, warum sollte er sich dann die Mühe machen, Typhinweise zu schreiben? Es stimmt, dass Typhinweise die Art und Weise, wie Ihr Code ausgeführt wird, nicht ändern: Python wird von Natur aus dynamisch typisiert, und das wird sich wahrscheinlich nicht ändern. Aus Sicht der Entwicklererfahrung haben Typhinweise jedoch viele Vorteile.(1) Verwenden Sie Typhinweise, insbesondere in Funktionen, um Parametertypen und die Art der generierten Ergebnisse zu verdeutlichen, was sehr einfach zu lesen und zu verstehen ist.
(2) Typhinweise eliminieren den kognitiven Overhead und erleichtern das Lesen und Debuggen von Code. Anhand der Arten von Ein- und Ausgängen können Sie leicht auf die Objekte und deren Aufruf schließen.
IDE-Typprüfung
Automatische Vervollständigung nach IDE-Typprüfung
4. ListenverwendungWenn Sie eine Liste benötigen, ist das Innere der Liste ein Float-Typ Hinweis, das ist nicht möglich:x: int = 2 x = 3.5Die Standardbibliothekseingabe berücksichtigt dieses Problem, Sie können Folgendes tun:
def my_dummy_function(l: list[float]): return sum(l)
5. Dict-Verwendung
from typing import List def my_dummy_function(vector: List[float]): return sum(vector)
Mit Hilfe von Dict , Sie können den Typ wie folgt definieren:
my_dict = {"name": "Somenzz", "job": "engineer"}
6 TypedDict-Nutzung
from typing import Dict my_dict_type = Dict[str, str] my_dict: my_dict_type = {"name": "Somenzz", "job": "engineer"}
Mit Hilfe von TypedDict können Sie Folgendes tun:
TypedDict7. Ab Python 3.10 wird Union durch | ersetzt. Dies bedeutet, dass Union[X, Y] ist entspricht jetzt X|Y. Union[X, Y] (oder X | Y) bedeutet X oder Y.Angenommen, Ihre Funktion muss eine Datei aus dem Cache-Verzeichnis lesen und das Torch-Modell laden. Dieser Cache-Verzeichnisspeicherort kann ein Zeichenfolgenwert sein (z. B. /home/cache) oder ein Pfadobjekt der Pathlib-Bibliothek. In diesem Fall lautet der Code wie folgt:
d = {"name": "Somenzz", "interests": ["chess", "tennis"]}
def load_model(filename: str, cache_folder: Union[str, Path]): if isinstance(cache_folder, Path): cache_folder = str(cache_folder) model_path = os.join(filename, cache_folder) model = torch.load(model_path) return modelSie können auch eine Parameterliste für solche Funktionsparameter angeben, was wirklich leistungsstark ist: Syntax:
from typing import Callable def sum_numbers(x: int, y: int) -> int: return x + y def foo(x: int, y: int, func: Callable) -> int: output = func(x, y) return output foo(1, 2, sum_numbers)Beispiel:
Callable[[input_type_1, ...], return_type]
当你传入的参数可以为任何类型的时候,就可以使用 Any
def bar(input: Any): ...
如果你的函数使用可选参数,具有默认值,那么你可以使用类型模块中的 Optional 类型。
from typing import Optional def foo(format_layout: Optional[bool] = True): ...
Sequence 类型的对象是可以被索引的任何东西:列表、元组、字符串、对象列表、元组列表的元组等。
from typing import Sequence def print_sequence_elements(sequence: Sequence[str]): for i, s in enumerate(s): print(f"item {i}: {s}"
Tuple 类型的工作方式与 List 类型略有不同,Tuple 需要指定每一个位置的类型:
from typing import Tuple t: Tuple[int, int, int] = (1, 2, 3)
如果你不关心元组中每个元素的类型,你可以继续使用内置类型 tuple。
t: tuple = (1, 2, 3, ["cat", "dog"], {"name": "John"})
类型提示在代码之上带来了额外的抽象层:它们有助于记录代码,澄清关于输入/输出的假设,并防止在顶部执行静态代码分析 (mypy) 时出现的隐蔽和错误。
Das obige ist der detaillierte Inhalt vonBest Practices für Typhinweise in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!