Heim  >  Artikel  >  Backend-Entwicklung  >  Best Practices für Typhinweise in Python

Best Practices für Typhinweise in Python

王林
王林nach vorne
2023-04-23 09:28:061474Durchsuche

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.

1. Typhinweise sind nur auf syntaktischer Ebene gültig.

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

2. Verwenden Sie mypy, um die Typhinweise zu überprüfen

Mit Hilfe von Mypy installieren Sie es zuerst mit pip install mypy und verwenden Sie dann mypy script.py:

Weitere Informationen zu Mypy finden Sie im vorherigen Artikel Typhinweise sehr praktisch. 如何更好的使用 Python 的类型提示?

3. Vorteile von Typhinweisen

Wenn 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.

如何更好的使用 Python 的类型提示? (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.

(3) Typhinweise können das Codebearbeitungserlebnis verbessern. IDEs können sich auf die Typprüfung verlassen, um Ihren Code statisch zu analysieren und potenzielle Fehler zu erkennen (z. B. Übergabe von Parametern des falschen Typs, Aufruf der falschen Methode usw.). Darüber hinaus wird für jede Variable eine automatische Vervollständigung basierend auf Typhinweisen bereitgestellt.

IDE-Typprüfung

IDE-Typprüfung 如何更好的使用 Python 的类型提示?

Automatische Vervollständigung nach IDE-Typprüfung 如何更好的使用 Python 的类型提示?

4. Listenverwendung

Wenn Sie eine Liste benötigen, ist das Innere der Liste ein Float-Typ Hinweis, das ist nicht möglich:

x: int = 2

x = 3.5
如何更好的使用 Python 的类型提示?Die Standardbibliothekseingabe berücksichtigt dieses Problem, Sie können Folgendes tun:

def my_dummy_function(l: list[float]):
 return sum(l)

5. Dict-Verwendung

Wenn Sie einen solchen Typ anregen möchten:

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

Was sollten Sie tun, wenn Sie nach einem solchen Typ fragen müssen?

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:

TypedDict

7. 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.

如何更好的使用 Python 的类型提示?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"]}

8

Wenn Sie eine Funktion als Parameter eingeben müssen, kann der Typhinweis dieses Parameters Callable sein.

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 model

Sie 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]

9、Any 用法

当你传入的参数可以为任何类型的时候,就可以使用 Any

def bar(input: Any):
...

10、Optional 用法

如果你的函数使用可选参数,具有默认值,那么你可以使用类型模块中的 Optional 类型。

from typing import Optional

def foo(format_layout: Optional[bool] = True):
...

11、Sequence 用法

Sequence 类型的对象是可以被索引的任何东西:列表、元组、字符串、对象列表、元组列表的元组等。

from typing import Sequence

def print_sequence_elements(sequence: Sequence[str]):
for i, s in enumerate(s):
print(f"item {i}: {s}"

12、Tuple 用法

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen