Áp dụng static typing trong Python với Mypy



  • Ở một số ngôn ngữ thì static typing là cách duy nhất để sử dụng. Còn Python thì sử dụng dynamic typing nghĩa là khi một biến được gán một giá trị ở kiểu dữ liệu này (ví dụ là kiểu int) thì sau đó nó có thể lưu giá trị của một kiểu dữ liệu khác (string). Tuy nhiên, trong một vài ứng dụng thì điều này sẽ dẫn tới lỗi vì khối code muốn nhận giá trị từ một kiểu dữ liệu nhưng lập trình viên lại truyền vào một kiểu khác.

    Python 3.5 giới thiệu tiêu chuẩn cho việc đánh dấu (annotation) tại những vị trí mã nguồn mà các tham số truyền vào hàm phải là kiểu dữ liệu nào và hàm cần trả về kiểu dữ liệu nào. Nhưng việc kiểm tra dữ liệu lại chỉ ở việc thực hiện đánh dấu mà bạn có thể nhìn trong mã nguồn, khi thực thi thì chúng sẽ bị bỏ đi. Như vậy, có nghĩa là việc kiểm tra kiểu dữ liệu không đảm bảo lúc thực thi.

    >>> def add(a: int, b: int) -> int:
    ...     return a+b
    ...
    

    Ví dụ, hàm ở trên sẽ thực hiện cộng hai giá trị vào nhau. Việc đánh dấu kiểu dữ liệu (type hint) cho thấy kiểu số truyền vào hàm và kết quả trả về phải là kiểu int.

    Vậy xem thử nếu chúng ta gọi hàm trên thì kết quả sẽ như thế nào:

    >>> add(1, 5)
    6
    >>> add('a', '3')
    'a3'
    

    Như bạn thấy thì ở đây có thể truyền vào bất cứ kiểu dữ liệu nào và cũng trả về kiểu dữ liệu có độ ưu tiên hơn trong phép tính cộng, và điều này có vẻ không như mong đợi cho hàm tính tổng cho hai số nguyên.

    mypy là một thư viện sẽ hỗ trợ việc type-hint và đưa ra các thông báo nếu như lập trình viên đang gọi hàm với kiểu dữ liệu không hợp lệ.

    ...

    Các bạn tham khảo thêm tại nguồn bài viết: https://kodemate.com/articles/ap-dung-static-typing-trong-python-voi-mypy


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.