A purefunction là một chức năng tương tự như chức năng Toán học, nơi không có tương tác với "thế giới thực" cũng như các tác dụng phụ. Từ quan điểm thực tế hơn của xem, nó có nghĩa là một chức năng tinh khiết có thể không:Làm cách nào để kiểm tra xem hàm có thuần trong Python không?
- In hoặc hiển thị một thông
- Hãy ngẫu nhiên
- Depend on thời gian hệ thống
- Thay đổi các biến toàn cục
- Và những người khác
Tất cả những hạn chế này giúp dễ dàng hơn để giải thích về hàm thuần túy s hơn là những người không thuần khiết. Phần lớn các chức năng sau đó sẽ được tinh khiết để chương trình có thể có ít lỗi hơn.
Trong các ngôn ngữ có hệ thống loại lớn như Haskell, người đọc có thể biết ngay từ đầu nếu chức năng là hoặc không thuần túy, giúp việc đọc liên tục dễ dàng hơn.
Trong Python, thông tin này có thể được mô phỏng bởi trình trang trí @pure
được đặt ở trên cùng của hàm. Tôi cũng muốn rằng trang trí để thực sự làm một số công việc xác nhận. Vấn đề của tôi nằm trong việc thực hiện một trang trí như vậy.
Hiện tại, tôi chỉ cần tìm mã nguồn của hàm cho các từ khóa như global
hoặc random
hoặc print
và than phiền nếu tìm thấy một trong số chúng.
import inspect
def pure(function):
source = inspect.getsource(function)
for non_pure_indicator in ('random', 'time', 'input', 'print', 'global'):
if non_pure_indicator in source:
raise ValueError("The function {} is not pure as it uses `{}`".format(
function.__name__, non_pure_indicator))
return function
Tuy nhiên, bạn có thể làm việc này tùy thuộc vào may mắn của mình, bạn có thể giúp tôi viết một trang trí đẹp hơn không?
Bạn có thể 'inspect.getsource' rồi' ast.parse' và đi bộ kiểm tra các nút khác nhau ... nhưng bạn sẽ đi ngược lại lý do ngôn ngữ tồn tại - xem xét sử dụng mô đun 'abc' nếu bạn muốn , sau đó 'isinstance' kiểm tra xem cần ở đâu ... - python được ** gõ mạnh ** - không ** tĩnh ** gõ –
@JonClements ngôn ngữ động thực tế thực hiện xác minh biên dịch ít hơn, nhưng tôi nghĩ đó là kiểm tra cụ thể sẽ tăng cường rất nhiều tổ chức chương trình và kiểm tra lại sự hiểu biết của các lập trình viên về công việc của mình. – Caridorc
Sau đó, sử dụng một ngôn ngữ gõ tĩnh ... :) Bạn có thể xem nó như là một điều * xấu * hoặc một điều * tốt ... nhưng đó là cách nó là –