Tôi có một số mã nguồn được viết cho Python 3.5 mà tôi muốn thực thi theo Python 3.4. Các tính năng duy nhất từ 3,5 mà tôi sử dụng mà không có sẵn trong 3,4 là gợi ý loại, vì vậy tôi muốn viết một kịch bản để loại bỏ những hoàn toàn. Điều này có vẻ dễ dàng ngay từ cái nhìn đầu tiên và tôi quyết định viết một số regex để làm điều này, nhưng sau đó tôi nghĩ về một vài trường hợp cạnh và tôi đã không chắc chắn làm thế nào để giải quyết vấn đề cho một chức năng phức tạp hơn như thế này:Xóa gợi ý loại trong nguồn Python theo lập trình
def foo(bar: Dict[T, List[T]],
baz: Callable[[T], int] = lambda x: (x+3)/7,
**kwargs) -> List[T]:
Về cơ bản, tôi phải phân tích toàn bộ và xây dựng lại danh sách đối số mà không có chú thích loại. Làm thế nào tôi thậm chí sẽ tiếp cận điều này?
Các [AST mô-đun] (https://docs.python.org/3/library/ast.html) là bạn của bạn trong nhiệm vụ chuyển đổi nguồn, đặc biệt. ['NodeTransformer'] (https://docs.python.org/3/library/ast.html#ast.NodeTransformer). Đối với đảo ngược, bạn có thể cần một số gói bên thứ 3. –
cảm ơn. wow, công cụ đó phức tạp ... Tôi thậm chí sẽ không biết cách nhận ra gợi ý kiểu bằng cách sử dụng ngữ pháp này – Klamann
Hãy xem [ngữ pháp] (https://docs.python.org/3/library/ast.html # abstract-ngữ pháp): ví dụ 'arg' chứa tùy chọn expr 'chú thích' và một' hàmDef' tùy chọn expr 'trả về'. Biến áp của bạn sẽ loại bỏ chúng. –