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]
Mari kita lihat contoh yang lebih lengkap: sebuah fungsi yang menggunakan dua argumen. Salah satunya adalah daftar dictionary dimana masing-masing berisi key sebagai string dan value sebagai integer. Argumen lainnya adalah sebuah string atau integer. Modul typing memungkinkan spesifikasi tepat untuk argumen yang rumit.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
from typing import List, Dict, Union
 
def 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

Postingan populer dari blog ini

NumPy Array Search

NumPy Array Split

NumPy Array Iterating