Type Hints
Petunjuk Tipe
Petunjuk tipe merupakan bawaan di atas anotasi fungsi. Singkatnya, anotasi fungsi memungkinkan kamu menambahkan keterangan pada argumen dan nilai return sebuah fungsi atau metode dengan metadata semaumu. Petunjuk tipe merupakan kasus khusus dari anotasi fungsi yang secara khusus menambahkan catatan argumen fungsi dan nilai return dengan informasi tipe standar. Anotasi fungsi secara umum dan petunjuk tipe secara khusus sepenuhnya merupakan opsional. Mari kita lihat contoh singkat:
1 2 3 4 5 | def reverse_slice(text: str, start: int, end: int) -> str: return text[start:end][::-1] reverse_slice('abcdef', 3, 5)'ed' |
Argumen ditambahkan catatan dengan tipe juga nilai return. Namun sangat penting untuk menyadari bahwa Python mengabaikan ini sepenuhnya. Itu membuat informasi tipe tersedia melalui atribut annotations obyek fungsi, namun itu saja.
1 2 | reverse_slice.__annotations{'end': int, 'return': str, 'start': int, 'text': str} |
Untuk memverifikasi bahwa Python benar-benar mengabaikan petunjuk tipe, mari kita kacaukan petunjuk tipe:
1 2 3 4 5 | def reverse_slice(text: float, start: str, end: bool) -> dict: return text[start:end][::-1] reverse_slice('abcdef', 3, 5)'ed' |
Seperti yang bisa kamu lihat, kode tetap bertingkah sama, terlepas dari petunjuk tipe.
Modul typing
Modul typing berisi tipe yang didesain untuk mendukung petunjuk tipe. Mengapa tidak menggunakan tipe Python yang sudah ada seperti int, str, list dan dict? Kamu tentu bisa menggunakan tipe tersebut, namun dikarenakan penentuan tipe yang dinamis pada Python, kamu tidak mendapatkan banyak informasi di luar tipe dasar. Sebagai contoh, jika kamu ingin menetapkan bahwa sebuah argumen adalah pemetaan antara string dan integer, tidak ada cara untuk melakukan itu dengan tipe standar Python. Dengan modul typing, itu sesederhana:
1 | Mapping[str, int] |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | from typing import List, Dict, Uniondef foo(a: List[Dict[str, int]], b: Union[str, int]) -> int: """Print a list of dictionaries and return the number of dictionaries """ if isinstance(b, str): b = int(b) for i in range(b): print(a)x = [dict(a=1, b=2), dict(c=3, d=4)]foo(x, '3')[{'b': 2, 'a': 1}, {'d': 4, 'c': 3}][{'b': 2, 'a': 1}, {'d': 4, 'c': 3}][{'b': 2, 'a': 1}, {'d': 4, 'c': 3}] |

Komentar
Posting Komentar