Hướng dẫn are type hints enforced in python? - gợi ý kiểu có được thực thi trong python không?

Một tùy chọn để tận dụng các gợi ý loại là mô -đun type_enforced. Liên quan đến hỗ trợ Python chính thức, dường như các loại gợi ý sẽ không được thực thi trực tiếp trong tương lai gần.

Đi vào type_enforced, gói cho phép bạn tận dụng các gợi ý loại. Nó hỗ trợ cả đầu vào và nhập đầu ra. Chỉ các loại được chỉ định mới được thực thi. Nhiều đầu vào có thể cũng được hỗ trợ để bạn có thể chỉ định một cái gì đó như int hoặc float.

Các loại đầu vào được xác thực đầu tiên (một cách lười biếng trong cuộc gọi chức năng) và nếu hợp lệ, hàm được xử lý trong đó giá trị trả về sau đó được xác thực.

Có một số hạn chế sao cho các cấu trúc loại lồng nhau không được hỗ trợ. Ví dụ: bạn không thể chỉ định loại dưới dạng danh sách các số nguyên, mà chỉ một danh sách. Bạn sẽ cần xác thực các mục trong danh sách bên trong chức năng của bạn.

pip install type_enforced
>>> import type_enforced
>>> @type_enforced.Enforcer
... def my_fn(a: int , b: [int, str] =2, c: int =3) -> None:
...     pass
...
>>> my_fn(a=1, b=2, c=3)
>>> my_fn(a=1, b='2', c=3)
>>> my_fn(a='a', b=2, c=3)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 47, in __call__
    return self.__validate_types__(*args, **kwargs)
  File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 83, in __validate_types__
    self.__check_type__(assigned_vars.get(key), value, key)
  File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 56, in __check_type__
    self.__exception__(
  File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 37, in __exception__
    raise TypeError(f"({self.__fn__.__qualname__}): {message}")
TypeError: (my_fn): Type mismatch for typed function (my_fn) with `a`. Expected one of the following `[]` but got `` instead.

Được đăng bởi 4 năm trước4 years ago

Lưu trữ

Hướng dẫn are type hints enforced in python? - gợi ý kiểu có được thực thi trong python không?

Gợi ý loại của Python có vẻ khá phổ biến và tôi đang xem xét sử dụng chúng trong dự án tiếp theo của mình. Tuy nhiên, tôi hơi lo lắng về cách mà, mặc dù chúng có thể được kiểm tra một cách tĩnh, chúng bị bỏ qua trong thời gian chạy.

Có ai đã thử sử dụng một thư viện như thực thi để đảm bảo các gợi ý loại vẫn được tôn trọng khi một chương trình đang chạy? Hoặc bạn thường thấy kiểm tra tĩnh là đủ?

Chủ đề này được lưu trữ

Nhận xét mới không thể được đăng và phiếu bầu không thể được chọn

Hướng dẫn are type hints enforced in python? - gợi ý kiểu có được thực thi trong python không?

cấp độ 1

Vâng, mọi người đã thử điều này.

  • Khái niệm chung về cơ bản là bạn đang thực hiện gõ tĩnh thông qua "Thiết kế theo hợp đồng". dpcontracts là một thư viện tốt để kiểm tra trước và hậu kỳ tổng quát hơn, nếu bạn quan tâm.

  • Tôi nhớ đã thấy một sự so sánh của bốn thư viện để thực thi loại ở đâu đó trong một cuộc thảo luận GitHub liên quan đến PEP. Nói tóm lại, tất cả đều có lỗi (một số chỉ có lỗi, một lỗi được đánh dấu "không hoàn chỉnh") nhưng quan trọng hơn là khoảng cách hiệu suất ~ 300X (nghĩa là ba mươi nghìn phần trăm) khi xử lý các loại chung như List[int].~300x performance gap (that is, thirty thousand percent) when dealing with generic types like List[int].

Kết quả thông thường là quyết định rằng một trình kiểm tra loại ngoại tuyến (thường là mypy) hoạt động tốt và mâu thuẫn mã của bạn để kiểm tra loại thời gian chạy thường bổ sung nhiều lỗi hơn là ngăn chặn - không nói gì về chi phí lao động và hiệu suất của con người.

Vì vậy, sử dụng các chú thích loại, kiểm tra tĩnh, sau đó di chuyển và chỉ cần thêm dpcontracts hoặc hypothesis hoặc cả hai.

cấp độ 2

Có sẵn máy móc (nhận thức chung) typecheck trong thời gian chạy vẫn hữu ích, tuy nhiên có thể chậm, ví dụ như ở ranh giới thô giữa các hệ thống không được phát hiện và đánh máy và trong các lần chạy thử. Đối với các hệ thống phức tạp, tôi sẽ vui vẻ thanh toán chi phí kiểm tra cho số lượng nhỏ dữ liệu mà các thử nghiệm có xu hướng chạy và để sản xuất chạy không bị thay đổi bởi nó.

cấp độ 1

Vâng, mọi người đã thử điều này.

Khái niệm chung về cơ bản là bạn đang thực hiện gõ tĩnh thông qua "Thiết kế theo hợp đồng". dpcontracts là một thư viện tốt để kiểm tra trước và hậu kỳ tổng quát hơn, nếu bạn quan tâm.

Tôi nhớ đã thấy một sự so sánh của bốn thư viện để thực thi loại ở đâu đó trong một cuộc thảo luận GitHub liên quan đến PEP. Nói tóm lại, tất cả đều có lỗi (một số chỉ có lỗi, một lỗi được đánh dấu "không hoàn chỉnh") nhưng quan trọng hơn là khoảng cách hiệu suất ~ 300X (nghĩa là ba mươi nghìn phần trăm) khi xử lý các loại chung như List[int].

cấp độ 1

Vâng, mọi người đã thử điều này.

cấp độ 2

Có sẵn máy móc (nhận thức chung) typecheck trong thời gian chạy vẫn hữu ích, tuy nhiên có thể chậm, ví dụ như ở ranh giới thô giữa các hệ thống không được phát hiện và đánh máy và trong các lần chạy thử. Đối với các hệ thống phức tạp, tôi sẽ vui vẻ thanh toán chi phí kiểm tra cho số lượng nhỏ dữ liệu mà các thử nghiệm có xu hướng chạy và để sản xuất chạy không bị thay đổi bởi nó.

Cá nhân tôi sử dụng MyPy như một linter rất kén chọn, để đảm bảo rằng tôi đã hiểu về mặt khái niệm và thực hiện các loại một cách hợp lý.

Nếu tôi muốn các loại nghiêm ngặt hơn thế, tôi sẽ sử dụng Haskell (mà tôi rất thích!).

cấp độ 2

Có sẵn máy móc (nhận thức chung) typecheck trong thời gian chạy vẫn hữu ích, tuy nhiên có thể chậm, ví dụ như ở ranh giới thô giữa các hệ thống không được phát hiện và đánh máy và trong các lần chạy thử. Đối với các hệ thống phức tạp, tôi sẽ vui vẻ thanh toán chi phí kiểm tra cho số lượng nhỏ dữ liệu mà các thử nghiệm có xu hướng chạy và để sản xuất chạy không bị thay đổi bởi nó.

Cá nhân tôi sử dụng MyPy như một linter rất kén chọn, để đảm bảo rằng tôi đã hiểu về mặt khái niệm và thực hiện các loại một cách hợp lý.

Nếu tôi muốn các loại nghiêm ngặt hơn thế, tôi sẽ sử dụng Haskell (mà tôi rất thích!).

Tôi cũng sử dụng rất nhiều mẫu thiết kế Haskell trong Python khi làm việc với các loại (mặc dù don don đi xa như sử dụng bất kỳ thư viện cụ thể nào cho các yếu tố lý thuyết thể loại Haskell).

cấp độ 2

Nếu tôi muốn các loại nghiêm ngặt hơn thế, tôi sẽ sử dụng Haskell (mà tôi rất thích!).

Tôi cũng sử dụng rất nhiều mẫu thiết kế Haskell trong Python khi làm việc với các loại (mặc dù don don đi xa như sử dụng bất kỳ thư viện cụ thể nào cho các yếu tố lý thuyết thể loại Haskell).

Các gợi ý loại có làm gì Python không?

Loại gợi ý cải thiện IDE và linters.Họ làm cho nó dễ dàng hơn nhiều để có lý do tĩnh về mã của bạn.Nhập gợi ý giúp bạn xây dựng và duy trì kiến trúc sạch hơn.Hành động viết gợi ý loại buộc bạn phải suy nghĩ về các loại trong chương trình của bạn.improve IDEs and linters. They make it much easier to statically reason about your code. Type hints help you build and maintain a cleaner architecture. The act of writing type hints forces you to think about the types in your program.

Có phải loại python có gợi ý lỗi không?

Nếu bạn chỉ ra (có kiểu gợi ý) rằng một biến sẽ lưu trữ một chuỗi, nhưng bạn gán nó cho boolean, mã của bạn sẽ chạy mà không có bất kỳ lỗi nào, bởi vì đó là cách nó hoạt động trong Python, nhưng Trình chỉnh sửa mã sẽđể hét vào mặt tôi.your code is going to run without any error, because that's how it works in Python, but the code editor is going to yell at me.

Làm thế nào để Python phát hiện gõ?

Nếu bạn cần kiểm tra loại đối tượng, thay vào đó, bạn nên sử dụng hàm Python isInstance ().Đó là bởi vì hàm isInstance () cũng kiểm tra xem đối tượng đã cho là một thể hiện của lớp con.use the Python isinstance() function instead. It's because isinstance() function also checks if the given object is an instance of the subclass.

Khi nào Python nhận được gợi ý loại?

Với Python 3.5, các gợi ý loại chính thức trở thành một phần của ngôn ngữ (PEP 484).Python 3.5, type hints officially became part of the language (PEP 484).